1

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 サーバーのバージョンに対応するマニュアルを確認してください near '+p.postid+'%' AND e.params LIKE '%parentid='+q.postid+'%' ORDER BY datetime DESC' at line 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
4

2 に答える 2

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
于 2012-09-04T03:26:30.503 に答える
1

次の 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
于 2012-09-04T03:27:16.060 に答える