私信  •  关注

Nick

Nick 最近回复了
2 年前
回复了 Nick 创建的主题 » Python-使用带位置的正则表达式提取和拆分字符串

根据你给出的格式,这个正则表达式应该做你想做的事情。

'(?P<ts>\d{4}-\d\d-\d\dT\d\d:\d\d:\d\dZ).*?\bdb=(?P<db>\S*).*?\buser=(?P<user>\S*).*?LOG:\s+(?P<query>.*?);?$

它使用命名的捕获组来匹配字符串的时间戳、数据库、用户和查询部分。时间戳假定为字符串格式,即。 yyyy-mm-ddThh:mm:ssZ ; 数据库和用户字段是适当标记后面的任何非空格字符,查询是从 LOG: 直到尾随 ; 最后一行。

Regex demo

在python中可以这样使用:

import re

str = "'2022-05-08T04:18:43Z UTC [ db=dev user=test pid=1073922359 userid=100 xid=2063 ]' LOG: alter table my_table alter column string type varchar(16);"
m = re.match(r"'(?P<ts>\d{4}-\d\d-\d\dT\d\d:\d\d:\d\dZ).*?\bdb=(?P<db>\S*).*?\buser=(?P<user>\S*).*?LOG:\s+(?P<query>.*?);?$", str)
if m is not None:
    print(m.groupdict())

输出:

{
 'ts': '2022-05-08T04:18:43Z',
 'db': 'dev',
 'user': 'test',
 'query': 'alter table my_table alter column string type varchar(16)'
}

笔记 这个正则表达式假定 db 标签在标签前面 user 标签如果情况可能并非如此,您可以通过将这些捕获组放在前瞻性头部来解决这一问题,例如。

'(?P<ts>\d{4}-\d\d-\d\dT\d\d:\d\d:\d\dZ)(?=.*?\bdb=(?P<db>\S*))(?=.*?\buser=(?P<user>\S*)).*?LOG:\s+(?P<query>.*?);?$

这将适用于以下字符串:

'2022-05-08T04:18:43Z UTC [ user=test db=dev pid=1073922359 userid=100 xid=2063 ]' LOG: alter table my_table alter column string type varchar(16);

Demo on regex101

2 年前
回复了 Nick 创建的主题 » Python-如果def没有异常错误,则成功打印

你没有从中返回任何值 sendFiles 所以默认值为 None 这和 False 在一个 if 表示改变 发送文件 根据是否成功返回布尔值。例如:

def sendFiles() -> bool:
    sentOK = True
    #send a PDF
    try:
        ftp.cwd('/pdf') 
        pdf = "file1.pdf"  # send the file
        with open(pdf, "rb") as file: 
            ftp.storbinary(f"STOR {pdf}", file)  
    except:
        print(colored(255, 0, 0, f"ERROR !!!!!!!! {pdf} was not sent!"))
        sentOK = False

    #send new POPUP IMAGE
    try:
        ftp.cwd('/image/popup')
        popup = "popup1.jpg" # send the file
        with open(popup, "rb") as file: 
            ftp.storbinary(f"STOR {popup}", file)
    except:
        print(colored(255, 0, 0, f"ERRO !!!!!!!! {popup} was not sent!"))
        sentOK = False

    return sentOK

如果你有很多这样的文件要发送,你可能会发现一个助手函数很有用。例如:

def sendFile(filename, dirname):
    try:
        ftp.cwd(dirname) 
        with open(filename, "rb") as file: 
            ftp.storbinary(f"STOR {filename}", file)  
    except:
        print(colored(255, 0, 0, f"ERROR !!!!!!!! {filename} was not sent!"))
        return False
    return True

然后 发送文件 简化为:

def sendFiles():
    sentOK = True
    sentOK = sentOK and sendFile('file1.pdf', '/pdf')
    sentOK = sentOK and sendFile('popup1.jpg', '/image/popup')
    return sentOK

这里还有进一步简化的余地,例如通过传递元组列表

[('file1.pdf', '/pdf'), ('popup1.jpg', '/image/popup')]

发送文件 然后只是反复浏览列表,例如。

def sendFiles(fileList):
    return all(sendFile(file[0], file[1]) for file in fileList)
2 年前
回复了 Nick 创建的主题 » Python日期时间错误?

你的代码在我位于澳大利亚阿德莱德的电脑上运行良好。你没有这样做的原因是,美国东部时区的夏令时从2020年3月8日开始,因此当时的时钟从凌晨2点切换到凌晨3点,因此为凌晨2点生成的时间戳对应于凌晨3点的实际时间(因为凌晨2点实际上并不存在)。如果你试着用你的代码 hour=1 hour=3 它会很好用的。

您可以通过单独使用UTC时间来解决此问题。

尝试使用 pandas.DataFrame.join 然后使用 pandas.DataFrame.to_csv .

df1.join(df2)
df1.to_csv('./df2.csv')
4 年前
回复了 Nick 创建的主题 » 如何使用mysql获取各种大小的可用性最高的记录

你可以确定哪些产品 全部的 COUNT(*) )与那些排 stock >0个( SUM(stock > 0) ORDER BY 条款:

SELECT product_id, product_name
FROM product_attributes
WHERE size in ('S', 'M', 'L')
GROUP BY product_id, product_name
ORDER BY COUNT(*) = SUM(stock > 0) DESC

输出:

product_id  product_name
2           ABC
1           XYZ

Demo on dbfiddle

4 年前
回复了 Nick 创建的主题 » 如何编写包含空数据行的MySQL查询?

你需要使用 LEFT JOIN people displays :

SELECT p.name, d.name
FROM people p
LEFT JOIN displays d ON d.person_id = p.id

name            name
Ron Swanson     Whales
Tom Haverford   Universe
Ron Swanson     Grizzlies
Tom Haverford   Homosapiens?
Andy Dwyer      (null)

Demo on SQLFiddle

4 年前
回复了 Nick 创建的主题 » 在MySql函数中使用查询参数

不能对列名或表名的过程使用参数。相反,您需要使用这些值准备一个语句并执行它。例如:

BEGIN
    DECLARE uValue INT(11);
    SET @sql = CONCAT('SELECT MAX(', uField, ') INTO uValue FROM ', uTable);
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    RETURN uValue;
END

注意,不能在函数中使用动态SQL,因此需要将其转换为 uValue 一个 OUT 参数,即。

CREATE PROCEDURE DMax(
  IN uField VARCHAR(100),
  IN uTable VARCHAR(100),
  OUT uValue <appropriate type>
)
BEGIN
    DECLARE uValue INT(11);
    SET @sql = CONCAT('SELECT MAX(', uField, ') INTO uValue FROM ', uTable);
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END

CALL DMax('table1', 'column1', @DMax)

然后你就可以

SELECT @DMax

4 年前
回复了 Nick 创建的主题 » 如何用Python过滤列表?

我想你在找一个 list comprehension

rx = [1, 2, 3, 4, 5, 6]
xs = [x for x in rx if x % 2 == 0]
# [2, 4, 6]
4 年前
回复了 Nick 创建的主题 » 创建分组数据的MySQL JSON函数有问题

你不能用

JSON_SET(@tempvar, '$.person_main.skills[0].Name', 'Learning');

因为 skills JSON_SET . 在尝试设置之前,您可以手动创建所有片段,但使用起来可能更容易 JSON_ARRAY JSON_OBJECT

SET @tempvar = '{"person_main":{"name_first": "Mike"}}';

SET @tempvar = JSON_INSERT(@tempvar, '$.person_main.skills', 
                               JSON_ARRAY(
                                   JSON_OBJECT('Name', 'Learning', 'Proficiency', 3),
                                   JSON_OBJECT('Name', 'Teaching', 'Proficiency', 2)
                               )
                           );

SELECT @tempvar;

输出:

{"person_main": {"skills": [{"Name": "Learning", "Proficiency": 3}, {"Name": "Teaching", "Proficiency": 2}], "name_first": "Mike"}}

Demo on dbfiddle

如果必须使用所述样式的代码,则必须在尝试设置每个片段的值之前手动创建每个片段:

SET @tempvar = '{"person_main":{"name_first": "Mike"}}';
SET @tempvar = JSON_SET(@tempvar, '$.person_main.skills', JSON_ARRAY());
SET @tempvar = JSON_SET(@tempvar, '$.person_main.skills[0]', JSON_OBJECT());
SET @tempvar = JSON_SET(@tempvar, '$.person_main.skills[0].Name', 'Learning');
SET @tempvar = JSON_SET(@tempvar, '$.person_main.skills[0].Proficiency', '3');
SET @tempvar = JSON_SET(@tempvar, '$.person_main.skills[1]', JSON_OBJECT());
SET @tempvar = JSON_SET(@tempvar, '$.person_main.skills[1].Name', 'Teaching');
SET @tempvar = JSON_SET(@tempvar, '$.person_main.skills[1].Proficiency', 2);
SELECT @tempvar;

{"person_main": {"skills": [{"Name": "Learning", "Proficiency": "3"}, {"Name": "Teaching", "Proficiency": 2}], "name_first": "Mike"}}

Demo on dbfiddle

你可以简单地 JOIN 你的两张桌子 uid 将两个查询合并为一个。注意,您没有正确使用准备好的语句,应该在 然后使用 bind_param 附加值:

$stmt = $conn->prepare('SELECT u.fname,u.lname,u.gender,u.city,u.state,p.bio
                        FROM users u
                        JOIN profile p ON p.uid = u.uid
                        WHERE u.uid=?');
$stmt->bind_param('s', $_POST['info']);
$stmt->execute();
$stmt->bind_result($fname,$lname,$gender,$city,$state,$bio);
while($stmt->fetch()) {
    $output=array(
        'fname' => $fname,
        'lname' => $lname,
        'gender' => $gender,
        'city' => $city,
        'state' => $state,
        'bio' => $bio
    );
}

profile 桌子,你应该用 LEFT JOIN 而不是 .

5 年前
回复了 Nick 创建的主题 » 用PHP-MYSQL按关键字搜索

你的问题在于 filter_input . 您正在指定的筛选器 FILTER_SANITIZE_NUMBER_INT ,但传递一个用空格分隔的单词列表。因此,输出 滤波器输入 +/- 以及输入的数字),因此不会向查询添加任何条件。你可能想用 FILTER_SANITIZE_STRING 相反。

5 年前
回复了 Nick 创建的主题 » MYSQL获取所选记录的上一条记录

我想这个查询会给你想要的结果。你把“活跃”的学期代码 WHERE 子查询中的子句,它将返回以前的学期代码,然后用于选择试用期的学生,例如。

SELECT p.code,
       p.name,
       p.`year`,
       p.term,
       pr.student,
       pr.onprob
FROM probationary pr
INNER JOIN period p ON pr.period = p.id
WHERE p.code = (SELECT MAX(code)
              FROM period p2
              WHERE p2.code < 20173)

code    name                        year    term    student onprob
20172   Second Semester, 2017-2018  2017    2       753     1
20172   Second Semester, 2017-2018  2017    2       754     1

Demo on dbfiddle

4 年前
回复了 Nick 创建的主题 » 如何从JSON数组MySQL中获取特定值

你可以用 JSON_SEARCH 找到用户所需语言的路径,例如。

SELECT JSON_SEARCH(@a, 'one', 'eng', null, '$[*].lng')

这将返回类似于 "$[1].lng" . 那你可以 JSON_UNQUOTE 价值和用途 SUBSTRING_INDEX . ,即。 $[1] . 然后可以将其用作 JSON_EXTRACT 与连接时 .zone_name

SELECT JSON_EXTRACT(@a, CONCAT(SUBSTRING_INDEX(JSON_UNQUOTE(JSON_SEARCH(@a, 'one', 'eng', null, '$[*].lng')), '.', 1), '.zone_name'))

输出:

"Zone B ENG"

Demo on dbfiddle

注意输出值周围有双引号,您可能需要删除那些 JSON引用 为了得到 Zone B ENG

还请注意,您可以使用 REPLACE 替换 .lng 具有 .区域名称 :

SELECT JSON_EXTRACT(@a, REPLACE(JSON_UNQUOTE(JSON_SEARCH(@a, 'one', 'eng', null, '$[*].lng')), '.lng', '.zone_name'))

Demo on dbfiddle

JSON_TABLE 创造生命的功能 更容易的:

SELECT *
FROM JSON_TABLE(@a,
                "$[*]" COLUMNS(
                  lng VARCHAR(4) PATH "$.lng",
                  zone_name VARCHAR(20) PATH "$.zone_name",
                  zone_location VARCHAR(20) PATH "$.zone_location",
                  about_zone VARCHAR(20) PATH "$.about_zone"
                  )
                ) AS j
WHERE lng = 'eng'

输出:

lng     zone_name   zone_location           about_zone
eng     Zone B ENG  Zone B Location ENG     About Zone EN

Demo on dbfiddle

如果从执行聚合 B JOIN 那是要吃饭的 A 得到每行的总和 一个

SELECT A.*, B.Q
FROM A
JOIN (SELECT P, SUM(Q) AS Q
      FROM B
      GROUP BY P) B ON B.P = A.Y
4 年前
回复了 Nick 创建的主题 » 子查询上的类MySQL

这可以通过连接所有 authorname and 所有的派生表 作者姓名 作者姓名

SELECT a1.id, a1.authorname, a1.authorbio
FROM (SELECT *
      FROM authorbiographies
      WHERE authorname NOT LIKE '% and %'
      ) a1
JOIN (SELECT *
      FROM authorbiographies
      WHERE authorname like '% and %'
      ) a2 on a2.authorname LIKE concat('%', a1.authorname, '%')

输出(用于您的示例)

id  authorname  authorbio
1   Joe Blow    has lived a long time
2   Jane Doe    wrote several books

Demo on SQLFiddle

4 年前
回复了 Nick 创建的主题 » 使用jQuery每4秒显示3种随机颜色

你的问题是 change

text.join(' ')

你会看到这三种颜色:

//set colors
var colors = ["white", "red", "blue", "yellow", "orange", "brown", "black", "violet", "purple", "pink", "green"];

//pick 3 of them randomly
var three_random_colors = (n) => {
  return colors.reduce((memo, val, index) => {
    var p = (n - memo.length); // How many remaining to choose.
    var q = colors.length - index; // How many remaining to choose from.
    if (Math.random() < p / q) {
      memo.push(val);
    }
    return memo;
  }, []);
};

//output the colors on the HTML
var elem = document.getElementById("changeText"); //the place where we change things
setInterval(change, 4000); //every 4 seconds run the following stuff:
function change() {
  var text = three_random_colors(3); //get what's inside "three_random_colors"
  elem.innerHTML = text.join(' '); //on div, add content <--- (I want 3 at once here! but I get only 1)
}
<div id="changeText"></div>
4 年前
回复了 Nick 创建的主题 » 尝试对用户输入使用词典(python)

字典绝对是简化这段代码的最好方法。可以使用输入作为键设置所有选项,并使用默认参数 dict.get 要在出错时返回消息,请执行以下操作:

choice = str(input('Choose a hero\n'))

hero_choose = { 'batman' : 'Moon Knight', 
                'moon knight' : 'Batman',
                'superman' : 'Hyperion',
                'hyperion' : 'Superman'
                # ...
               }

hero = hero_choose.get(choice.lower(), 'Your hero may not be available\nor your spelling may be wrong.')

print(hero)

你可以用 LAST_INSERT_ID() 获取自动增量 id 上次插入查询的值,并在当前查询中使用它。所以改变你的 userdaten 查询到:

$stmt2 = $con->prepare('INSERT INTO userdaten (id, name, vorname, gebdatum, strasse, hnr, plz, ort)
                        VALUES (LAST_INSERT_ID(), ?, ?, ?, ?, ?, ?, ?)');

可以使用条件聚合在一个查询中获取不同的和:

SELECT SUM(duration_seconds ) AS total_duration,
       SUM(CASE WHEN is_billable THEN duration_seconds ELSE 0 END) AS billable_duration,
       SUM(CASE WHEN NOT is_billable THEN duration_seconds ELSE 0 END) AS non_billable_duration
FROM yourtable

输出(用于示例数据)

total_duration  billable_duration   non_billable_duration
850             650                 200

Demo on SQLFiddle

4 年前
回复了 Nick 创建的主题 » Python替换由split函数分隔的列表索引

您可以使用带有三元运算符的列表理解来替换第6个元素:

arr=["5;V;K;4406632419324152;0123;172;9;0;0;06012020;3000",
"2;M;K;4406553211445698;0123;124;2;0;0;06012020;2000",
"3;M;K;5412115956124218;0123;236;3;0;1;06012020;2000",
"4;V;K;4406621015140546;0123;131;9;0;0;06012020;3000"]
new_value = 4
arr[0] = ';'.join(v if i != 6 else str(new_value) for i, v in enumerate(arr[0].split(';')))
print(arr)

['5;V;K;4406632419324152;0123;172;4;0;0;06012020;3000', 
 '2;M;K;4406553211445698;0123;124;2;0;0;06012020;2000', 
 '3;M;K;5412115956124218;0123;236;3;0;1;06012020;2000', 
 '4;V;K;4406621015140546;0123;131;9;0;0;06012020;3000'
]
4 年前
回复了 Nick 创建的主题 » 在python中替换字典的值

你可以用字典来理解:

d1_new = { k : d2[v] if v in d2 else v for (k, v) in d1.items() }

d2 对此:

d2 = {'0.1*K1':0.1*K1, '0.2*K2':0.2*K2, 'K1*K3':K1*K3}

d2级 一定要和里面的相符 d1 ,则输出如您所愿:

{
    ('a', 'b'): 300.0,
    ('b', 'c'): 0.21000000000000002,
    ('a', 'c'): 0.462,
    ('c', 'e'): 0.68,
    ('b', 'a'): 0.21000000000000002,
    ('c', 'd'): 4.2
}
4 年前
回复了 Nick 创建的主题 » python regex-从包含数字和字符的字符串中提取数字

p 对于小数点,替换为 第页 . 然后转换成浮点数。例如:

import re

def extract_num(s):
    return float(re.search(r'\d+p?\d*', s).group().replace('p', '.'))

strs = ['ms2p5', 'ms3', 'ms10']
print([extract_num(s) for s in strs])

输出:

[2.5, 3.0, 10.0]
4 年前
回复了 Nick 创建的主题 » MySQL:首先查找特定值,然后获取第二个值

你不能用 NULL 在一个 IN 表达式,所以您需要更改 WHERE

WHERE status = 'priority' OR status IS NULL

您可以删除 哪里

ORDER BY status = 'priority` DESC

这将放置 status = 'priority' 领先于那些 status 属于

所以你的问题就变成了:

SELECT * FROM gp 
WHERE status = 'priority' OR status IS NULL
ORDER BY status = 'priority` DESC
LIMIT 1

注意,要获得“第一”行 您需要一个ordering列(SQL表是无序的,因此没有ordering列“first”就没有意义),您可以将其添加到 ORDER BY 条款:

SELECT * FROM gp 
WHERE status = 'priority' OR status IS NULL
ORDER BY status = 'priority` DESC, id ASC
LIMIT 1
4 年前
回复了 Nick 创建的主题 » jQuery使用$(选择器)预处理多个div

你需要包装 el $() 因为它是一个DOM元素,而不是jQuery对象。

$('.dash').each((i, el) => {
  console.log(el);
  $(el).prepend('<div class="digit"><div class="top" style="display: none;">0</div><div class="bottom" style="display: block;">0</div></div>');
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="dash">
</div>
<div class="dash">
</div>

但你其实不需要 .each 你完全可以 prepend

$('.dash').prepend('<div class="digit"><div class="top" style="display: none;">0</div><div class="bottom" style="display: block;">0</div></div>');
<script src=“https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js”></script>
<div class=“dash”>
</分区>
<div class=“dash”>
4 年前
回复了 Nick 创建的主题 » 如何避免Jquery规则匹配中的重复替换

一种方法是把绳子分开 , ,然后在值匹配的任何位置 图[0-9]{1,2} ,将值替换为 <span>value</span> 重新组装管柱之前:

var str = "图1,good boy,图11,图2,图1,good girl";
console.log(str
            .split(',')
            .map(v => v.match(/图[0-9]{1,2}/u) ? `<span>${v}</span>` : v)
            .join(',')
            );
4 年前
回复了 Nick 创建的主题 » MYSQL复制数组值

你的问题是最后一个 foreach . $matchup 数组是否类似于

Array
(
    [home] => All-Stars
    [away] => Vets
)

你在迭代它的值,所以你要为每次匹配做两次插入。你其实不需要 foreach公司 好了,就用

foreach ($contests as $week => $matchup) {
    $home = $matchup['home'];
    $away = $matchup['away'];
    $sql = mysqli_query($link, "INSERT INTO tourn_fixtures(teamone, teamtwo) values ('$home', '$away')");
}

请注意,您还需要在 away 作为 $配对 .

下面是你的代码演示 INSERT 对每个 $配对 : Demo on 3v4l.org

你的问题是 case "getPrivatemessage" 您试图使用的代码 $sessionmember 等变量,但你没有真正设置它们,因为代码设置它们的值,即。

$privatemessage = $_GET["privatemessager-message"];
$sessionmember = $_GET["privatemessager-sessionmember"];
$othermember = $_GET["privatemessager-othermember"];

只存在于 "sendPrivateMessage" 分支机构 switch 陈述。你要么把代码复制到 "getPrivatemessage" 分支或移动到

if(isset($_REQUEST['action'])){

switch($_REQUEST['action']){
4 年前
回复了 Nick 创建的主题 » 从MySQL数据库中选择数据时遇到问题

你可以通过检查 USERID 符合 . 后面跟一些数字,后面跟一个 . 作为整个字符串(使用regex '^\\.[0-9]+\\.$' )如果是,返回 - ;如果不是,则生成 用户ID 直至(包括倒数第二个 . ):

SELECT
    CASE WHEN USERID REGEXP '^\\.[0-9]+\\.$' THEN '-'
         ELSE SUBSTRING(USERID, 1, LENGTH(USERID) - LOCATE('.', SUBSTRING(REVERSE(USERID), 2)))
    END AS PARENT,
    USERID,
    NAME
FROM user

输出:

PARENT      USERID      NAME
-           .1.         A
.1.         .1.1.       B
.1.         .1.2.       C
.1.2.       .1.2.1.     D
-           .2.         E
.2.         .2.1.       F
.2.1.       .2.1.1.     G
.2.1.1.     .2.1.1.1.   H
-           .3.         I
.3.         .3.1.       J

Demo on dbfiddle

同时获得 NAME PARENT ,我们 LEFT JOIN 以上结果返回到 user 上的桌子 起源 价值:

SELECT u.*, COALESCE(p.NAME, '-') AS PARENTNAME
FROM (
    SELECT
        CASE WHEN USERID REGEXP '^\\.[0-9]+\\.$' THEN '-'
             ELSE SUBSTRING(USERID, 1, LENGTH(USERID) - LOCATE('.', SUBSTRING(REVERSE(USERID), 2)))
        END AS PARENT,
        USERID,
        NAME
    FROM user
    ) u
LEFT JOIN user p ON p.USERID = u.PARENT
ORDER BY USERID

输出

PARENT      USERID      NAME    PARENTNAME
-           .1.         A       -
.1.         .1.1.       B       A
.1.         .1.2.       C       A
.1.2.       .1.2.1.     D       C
-           .2.         E       -
.2.         .2.1.       F       E
.2.1.       .2.1.1.     G       F
.2.1.1.     .2.1.1.1.   H       G
-           .3.         I       -
.3.         .3.1.       J       I

Demo on dbfiddle

4 年前
回复了 Nick 创建的主题 » MySQL基于json select查询更新多个表列值

你需要使用 INNER JOIN ,不是 CROSS JOIN 否则将插入不正确的数据。你需要在适当的条件下加入,即 id 值匹配。这应该有效:

update xp_guru_listings x
join (
    SELECT id,
           JSON_EXTRACT(json, '$.agencyLicense') AS cea_no, 
           JSON_EXTRACT(json, '$.district') AS district, 
           JSON_EXTRACT(json, '$.details."Type"') AS property_type,
           RIGHT(JSON_EXTRACT(json, '$.details."Type"'),9) AS listing_type 
    FROM xp_guru_listings) j ON j.id = x.id
set x.cea_no = j.cea_no, 
    x.district = j.district, 
    x.property_type = j.property_type, 
    x.listing_type = j.listing_type;

注意,您可以使用 JSON_EXTRACT 公式直接在 SET 部分 UPDATE :

UPDATE xp_guru_listings
SET cea_no = JSON_EXTRACT(json, '$.agencyLicense'),
    district = JSON_EXTRACT(json, '$.district'),
    property_type = JSON_EXTRACT(json, '$.details."Type"'),
    listing_type = RIGHT(JSON_EXTRACT(json, '$.details."Type"'),9)
4 年前
回复了 Nick 创建的主题 » 从大型生成的查询中修剪后面的mysql group_concat

通过删除 UNION ALL 从中的最后一个元素 GROUP_CONCAT 并将分离器改为 全部联合

SELECT CONCAT("SELECT a.`table`, a.parm1 AS `updatedColumn(s)`, a.parm2 AS `DDLtype`, SUM(a.qtyReady) AS `qtyReady`, SUM(a.qtyQueued) AS `qtyQueued`, SUM(a.qtyProcessed) AS `qtyProcessed`, SUM(a.qtyTransferred) AS `qtyTransferred`, SUM(a.qtyError) AS `qtyError`, a.sys_updated_by AS `updatedBy`, SUM(COUNT) AS `TtlCount` FROM (",
             (GROUP_CONCAT("SELECT ", 
                           TABLE_NAME, 
                           "0.`table` AS 'table',LEFT(", 
                           TABLE_NAME, 
                           "0.`parm1`,40) AS 'parm1',LEFT(", 
                           TABLE_NAME, 
                           "0.`parm2`,40) AS 'parm2',SUM(CASE WHEN ", 
                           TABLE_NAME, 
                           "0.`state` = 'ready' THEN 1 ELSE 0 END)AS `qtyReady`,SUM(CASE WHEN ", 
                           TABLE_NAME, 
                           "0.`state` LIKE 'queued%' THEN 1 ELSE 0 END)AS `qtyQueued`,SUM(CASE WHEN ", 
                           TABLE_NAME, 
                           "0.`state` = 'processed' THEN 1 ELSE 0 END)AS `qtyProcessed`,SUM(CASE WHEN ",
                           TABLE_NAME, 
                           "0.`state` = 'transferred' THEN 1 ELSE 0 END)AS `qtyTransferred`,SUM(CASE WHEN ",
                           TABLE_NAME, 
                           "0.`state` = 'error' THEN 1 ELSE 0 END)AS `qtyError`,", 
                           TABLE_NAME,
                           "0.`sys_updated_by` AS 'sys_updated_by', COUNT(", 
                           TABLE_NAME, 
                           "0.`sys_id`) AS `count` FROM ",
                           TABLE_NAME, 
                           " ", 
                           TABLE_NAME,
                           "0", " WHERE ", 
                           TABLE_NAME, 
                           "0.`queue` = 'text_index' GROUP BY ",
                           TABLE_NAME,
                           "0.`table`,", 
                           TABLE_NAME, 
                           "0.`parm1`,", 
                           TABLE_NAME,
                           "0.`parm2`,",
                           TABLE_NAME,
                           "0.`sys_updated_by`"  
                           SEPARATOR ' UNION ALL '))
               ')a GROUP BY a.`table`, a.`parm1`,  a.`parm2`,  a.`sys_updated_by` ORDER BY `TtlCount` DESC LIMIT 40;')
FROM information_schema.tables 
WHERE table_schema !='mysql' AND table_name LIKE 'sys_log0%'
4 年前
回复了 Nick 创建的主题 » $row未正确回显mySql数据库中的行

你的问题在于 echo 声明。你在试图回应 $row 只需调用值(例如。 $row["MainPagePosts"]; ),但是那实际上什么也做不了,你需要 回声 他们也是。改变

echo '<p class="UserPost">'; $row["MainPagePosts"]; echo " | Posted By: "; $row["PostUser"]; echo"</p>";

to(使用字符串连接运算符 . ):

echo '<p class="UserPost">' . $row["MainPagePosts"] . " | Posted By: " . $row["PostUser"] . "</p>";

它应该可以正常工作。

4 年前
回复了 Nick 创建的主题 » MySQL将两个独立的复杂查询中的列合并为一行

你只需要 JOIN garment_colour_name 表二次得到第二种颜色的名称。请注意,并非所有衣服都有两种颜色,因此您需要使用 LEFT JOIN 而不是 INNER JOIN :

SELECT 
    skuColourwayID,
    gc1.cHex AS c1Hex, 
    gc1.cLongName AS c1Name,
    gc2.cHex AS c2Hex,
    gc2.cLongName AS c2Name,
    skuID, 
    cwColID1,
    cwColID2
from garment_sku
join garment_colourways
on cwID=skuColourwayID
join garment_colour_name gc1
on gc1.cID=cwColID1
left join garment_colour_name gc2
on gc2.cID=cwColID2
where skuLineID= <cfqueryPARAM value = "#url.lnID#" CFSQLType = "CF_SQL_INTEGER">
group by skuColourwayID
5 年前
回复了 Nick 创建的主题 » 如何在Python中将ByteArray[]转换为int16?

试试 PyAudio 图书馆。这是一个非常好的图书馆,为工作与所有的东西音频和跨平台。

链接 here 关于pyadio文档和 here 从programcreek上的一个例子可以让你开始解决你的问题。

4 年前
回复了 Nick 创建的主题 » 登录系统,将mysqli转换为pdo错误

当你打电话 fetchAll 您从查询中获取所有结果行,因此在调用 fetch . 因为您只希望返回一行,所以可以直接调用 取来 一次:

if ($row = $result->fetch(PDO::FETCH_ASSOC)) {
    if($row["password"] == $loginPass){
        echo "Login Success. Welcome ", $loginUser, "!";        
    }
    else{
        echo "Wrong Credentials.";
    }
}
else {
    echo "Username does not exist.";
}

笔记:

  1. 您对SQL注入非常开放,应该使用准备好的语句
  2. 您不应该用纯文本存储密码,而应该使用PHP password_hash password_verify 存储和验证
  3. 区分不正确的密码和无效的用户名通常被认为是不好的做法。对两者使用相同的错误消息。

您应该使用类似于以下代码的内容来避免这些问题:

$sql = "SELECT password FROM users WHERE username = :username";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':username', $loginUser);
$stmt->execute();
if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    if(password_verify($loginPass, $row["password"])) {
        echo "Login Success. Welcome ", $loginUser, "!";        
    }
    else{
        echo "Wrong Credentials.";
    }
}
else {
    echo "Wrong Credentials.";
}
4 年前
回复了 Nick 创建的主题 » MYSQL动态插入间隔日数?[副本]

您可以使用常量生成整个查询:

$sql = 'SELECT * FROM orders WHERE user_id = :user_id 
        AND status = :status
        AND date_added > DATE_SUB(NOW(), INTERVAL ' . DOWNLOAD_DAYS . ' DAY)
        ORDER BY date_added DESC';

或者你可以绑定到 只是 区间值

$sql = 'SELECT * FROM orders WHERE user_id = :user_id 
        AND status = :status
        AND date_added > DATE_SUB(NOW(), INTERVAL :interval DAY)
        ORDER BY date_added DESC';
$stmt->bindValue(':interval', DOWNLOAD_DAYS, PDO::PARAM_INT);

您可以选择在给定日期之前登录的所有用户,然后选择 NOT EXISTS 查询以确定自该日期起尚未登录的用户:

SELECT l1.user_login, COUNT(*) AS logins
FROM wp_login_log_backup l1
WHERE l1.date < '2017-04-07 00:00:00' 
  AND NOT EXISTS (SELECT *
                  FROM wp_login_log_backup l2
                  WHERE l2.user_login = l1.user_login
                    AND l2.date > '2017-04-07 00:00:00' )
GROUP BY l1.user_login

输出:

user_login      logins
abigailrashbaum 1
robinbiundo     1
timothybrown    4

Demo on dbfiddle

4 年前
回复了 Nick 创建的主题 » jQuery为什么在数组中转换json对象宽度键0

你可以使用 JSON_FORCE_OBJECT 选择 json_encode 要解决此问题:

$my_obj1 = ["0" => "something"];
$my_obj1 = json_encode($my_obj1, JSON_FORCE_OBJECT);
echo $my_obj1;

输出:

{"0":"something"}

Demo on 3v4l.org

如果你想知道我们是否在 start 时间(但前提是 之前 时间)这将起作用:

NOW() BETWEEN start - INTERVAL 15 minute AND start
5 年前
回复了 Nick 创建的主题 » python nslookup ip列表

我认为最好将数据的读写分离为两个单独的函数。像这样的:

import os

def read():
    with open('pa2.txt','r+') as fh:
        lines = fh.read()
        for line in lines:
            os.system('nslookup' + str(line))
            print(line)
            write(line)

def write(res):
    with open('results.txt','w+') as fh2:
        fh2.write(res)


if __name__ == "__main__":
    read()

您可能需要编辑以适合您的特定期望结果

5 年前
回复了 Nick 创建的主题 » 在mysql中更新json中key的值

对于示例数据,可以使用 JSON_SEARCH 找到那个孩子 name Signature ,然后使用 JSON_REPLACE 替换值。像这样的:

UPDATE your_table
SET json_column = JSON_REPLACE(json_column, 
                               JSON_UNQUOTE(JSON_SEARCH(json_column, 'one', 'Signature', NULL, '$.children[*].name')),
                               'SignHere')