社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
私信  •  关注

Nick

Nick 最近回复了
1 年前
回复了 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

1 年前
回复了 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)
1 年前
回复了 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')