投稿の配列内の各投稿の最新の3つのコメントを取得することを目的とした次のクエリがあります。
SELECT * FROM comment AS tbl WHERE sscm_id IN
(
SELECT sscm_id FROM comment AS t1 WHERE t1.sscm_oid = 4
ORDER BY t1.sscm_id DESC LIMIT 3
UNION ALL
SELECT sscm_id FROM comment AS t2 WHERE t2.sscm_oid = 3
ORDER BY t2.sscm_id DESC LIMIT 3
)
これは私に次のエラーを与えます:
1221-UNIONおよびORDER BYの誤った使用法
一部の検索とグーグルは、各サブクエリの周りに()を配置することでこの問題を解決できる可能性があることを示唆しているようですが、クエリを
SELECT * FROM comment AS tbl WHERE sscm_id IN
(
(SELECT sscm_id FROM comment AS t1 WHERE t1.sscm_oid = 4
ORDER BY t1.sscm_id DESC LIMIT 3)
UNION ALL
(SELECT sscm_id FROM comment AS t2 WHERE t2.sscm_oid = 3
ORDER BY t2.sscm_id DESC LIMIT 3)
)
しかし、これは私に次のエラーを与えます:
1064-SQL構文にエラーがあります。 4行目の「UNION ALL(SELECT sscm_id FROM bpsocial_comment AS t2 WHERE t2.sscm_oid = 3 OR」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。
それで、サブクエリでORDER BYと組み合わせてUNIONを機能させるにはどうすればよいですか?
ありがとうR
IN / LIMIT
制限とUNION / ORDER BY
構文要件を渡す方法はいくつかあります。
Unionを派生テーブルでラップします。
SELECT * FROM comment AS tbl WHERE sscm_id IN
( SELECT sscm_id
FROM
( ( SELECT sscm_id FROM comment AS t1 WHERE t1.sscm_oid = 4
ORDER BY t1.sscm_id DESC LIMIT 3)
UNION ALL
( SELECT sscm_id FROM comment AS t2 WHERE t2.sscm_oid = 3
ORDER BY t2.sscm_id DESC LIMIT 3)
) AS tmp
) ;
WHERE / IN
の代わりにJOIN
を使用:UNION ALL
の代わりに[UNION
が必要です。重複を避けるためです。
SELECT tbl.*
FROM comment AS tbl
JOIN
( ( SELECT sscm_id FROM comment AS t1 WHERE t1.sscm_oid = 4
ORDER BY t1.sscm_id DESC LIMIT 3)
UNION
( SELECT sscm_id FROM comment AS t2 WHERE t2.sscm_oid = 3
ORDER BY t2.sscm_id DESC LIMIT 3)
) AS tmp
ON tmp.sscm_id = tbl.sscm_id ;