繁体   English   中英

如何在SQL LIKE查询中添加列值?

[英]How to add column value to SQL LIKE query?

我正在尝试使用MySQL执行以下查询:

SELECT e.event, 
       BINARY e.params as params, 
       UNIX_TIMESTAMP(e.datetime) AS datetime, 
       p.postid AS postid,
       q.postid AS parentid 
FROM qa_eventlog as e 
         LEFT JOIN qa_posts as p 
         LEFT JOIN qa_posts as q ON e.userid=1 AND 
              DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= datetime AND 
              e.params LIKE '%postid='+p.postid+'%' AND 
              e.params LIKE '%parentid='+q.postid+'%' 
ORDER BY datetime DESC

但它给出以下错误:

错误1064:您的SQL语法有错误; 检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第1行的'+ p.postid +'%'和e.params类似于'%parentid ='+ q.postid +'%'ORDER BY datetime DESC'处使用

似乎不喜欢+号,我认为这是在查询中添加值的正确方法。 我猜不:)我如何要求它检查一个表(一个整数)的列值是否在另一个表(一个字符串)的列值中?

编辑:感谢您的回答,这是使用CONCAT的有效代码:

SELECT e.event, 
    BINARY e.params as params, 
    UNIX_TIMESTAMP(e.datetime) AS datetime,
    p.postid AS postid, 
    q.postid AS parentid 
FROM qa_eventlog AS e 
    LEFT JOIN qa_posts AS p 
        ON e.params LIKE CONCAT('%postid=', p.postid, '%' ) 
    LEFT JOIN qa_posts AS q 
        ON e.params LIKE CONCAT('%postid=', q.postid, '%' ) 
WHERE e.userid=1 
    AND DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= datetime 
ORDER BY datetime DESC

试试这个

SELECT e.event, 
       e.params as params, 
       UNIX_TIMESTAMP(e.datetime) AS datetime, 
       p.postid AS postid,
       q.postid AS parentid 
FROM qa_eventlog as e 
         LEFT JOIN qa_posts as p 
             ON e.id = p.id        -- not sure on this. please supply
                                   -- the correct linking columnID
         LEFT JOIN qa_posts as q 
             ON e.id = q.id        -- and this
WHERE  (DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= datetime) AND 
       e.params LIKE CONCAT('%', 'postid=', p.postid, '%' )  AND 
       e.params LIKE CONCAT('%', 'parentid=', q.postid, '%' )  AND
       e.userid = 1
ORDER BY datetime DESC

请参阅MySQL文档中的CONCAT()http : //dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_concat

如:

SELECT e.event, 
       BINARY e.params as params, 
       UNIX_TIMESTAMP(e.datetime) AS datetime, 
       p.postid AS postid,
       q.postid AS parentid 
FROM qa_eventlog as e 
         LEFT JOIN qa_posts as p 
         LEFT JOIN qa_posts as q ON e.userid=1 AND 
              DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= datetime AND 
              e.params LIKE CONCAT('%postid=',p.postid,'%') AND 
              e.params LIKE CONCAT('%parentid=',q.postid,'%')
ORDER BY datetime DESC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM