我正在尝试使用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服务器版本对应的手册,以获得正确的语法 使用'+ p.postid +'%'和e.params LIKE'%parentid ='+ q.postid +'%' ORDER BY datetime DESC'在第1行
它似乎不喜欢+
符号,我认为这是在查询中添加值的正确方法;猜不是:)我如何要求它检查一个表(整数)的列值是否在另一个表(字符串)的列值中?
编辑:感谢您的回答,这是使用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
答案 0 :(得分:4)
尝试这个,
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
答案 1 :(得分:1)
请参阅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