2
SELECT c.review, m.category, u.username, i.item, i.item_id, m.cat_id, COUNT(rv.review_id) totalCount
FROM reviews AS c
LEFT JOIN review_vote as rv
   ON c.review_id = rv.review_id
LEFT JOIN users AS u
   ON u.user_id = c.user_id 
LEFT JOIN items AS i
   ON i.item_id = c.item_id
LEFT JOIN master_cat AS m
   ON m.cat_id = i.cat_id
WHERE LENGTH(c.review) > 50 AND m.category = 'Movies' AND totalCount > 2
GROUP BY rv.review_id
ORDER BY RAND()
LIMIT 1

次のエラーが表示されます。

#1054 - Unknown column 'totalCount' in 'where clause' 

すぐにこの列を選択していますが、なぜ存在しないのですか?

表 にリストされている (または 2 回以上投票された) レビューをランダムに選択しようとしていますrv。また、GROUP BY正しく使用しているかどうかわかりませんか?

4

1 に答える 1

4

集計列 ( などcount()) では、HAVING句を使用して条件を設定する必要があります。

SELECT c.review, m.category, u.username, i.item, i.item_id, m.cat_id, COUNT(rv.review_id) totalCount
FROM reviews AS c
LEFT JOIN review_vote as rv
   ON c.review_id = rv.review_id
LEFT JOIN users AS u
   ON u.user_id = c.user_id 
LEFT JOIN items AS i
   ON i.item_id = c.item_id
LEFT JOIN master_cat AS m
   ON m.cat_id = i.cat_id
WHERE LENGTH(c.review) > 50 AND m.category = 'Movies'
GROUP BY rv.review_id
HAVING COUNT(rv.review_id) > 2 -- Added this line!
ORDER BY RAND()
LIMIT 1

一部のデータベース (mysql を含む) では、列のエイリアス (例: ) を使用できますHAVING totalCount > 2が、式の使用はすべてのデータベースで機能します。つまり、(少なくとも) mysql の場合、次のようにコーディングできます。

....
GROUP BY rv.review_id
HAVING totalCouunt > 2
...

しかし、他のすべてのデータベースに移植できるわけではありません。

于 2013-05-18T22:51:49.520 に答える