次の2つのテーブルで設定されたレビューシステムを含むクエリについてサポートが必要です。
レビュー ------- id日付user_iditem_id評価レビュー 1 02-2012 40 4563'私はそれが好きです' 2 03-2012 22 3421'私はそれが好きではありません' 3 04-2012 45 5480'嫌い'
reviews_thumbs -------------- review_id user_id like 1 22 1 1 45 -1 2 40 -1 3 22 1
「reviews_thumbs」テーブルは、レビューの賛成票と反対票を追跡するために存在し、レビューを品質で評価できるようにします。「like」列では、1は賛成票、-1は反対票です。(rating
レビューテーブルの列はスターシステムであり、無関係です。)
レビューを読み込むときは、次の詳細がわかるようにreviews_thumbsテーブルに参加する必要があります(返される個々のレビューごとに)。
1.賛成票の総数 2.反対票の総数 3.現在のアクティブユーザーがレビューに賛成または反対したかどうか
私は次のクエリを使用してこれを達成しましたが、これは私にはぴったりではありません。
SELECT `reviews`。*、 COUNT(upVoteTable.`user_id`)AS upVotes、 COUNT(downVoteTable.`user_id`)AS downVotes、 COUNT(userUpTable.`user_id`)AS userUp、 COUNT(userDownTable.`user_id`)as userDown FROM`レビュー` LEFT JOIN `reviews_thumbs` AS upVoteTable ON upVoteTable.`review_id` = `reviews`.`id` AND upVoteTable.`like` = 1 LEFT JOIN `reviews_thumbs` AS downVoteTable ON downVoteTable.`review_id` = `reviews`.`id` AND downVoteTable.`like` = -1 LEFT JOIN `reviews_thumbs` AS userUpTable ON userUpTable.`review_id` = `reviews`.`id` AND userUpTable.`like` = 1 AND userUpTable.`user_id` =:userid LEFT JOIN `reviews_thumbs` AS userDownTable ON userDownTable.`review_id` = `reviews`.`id` AND userDownTable.`like` = -1 AND userDownTable.`user_id` =:userid WHERE `item_id` =:itemid GROUP BY`reviews`.`id` `date`DESCで注文
(そして、適切な:useridと:itemidをバインドします。)
したがって、このクエリは完全に機能し、必要なことを実行します。しかし、それは多くの参加であり、これを行うためのより良い方法があるはずだと私はほぼ確信していますが、私は何も理解できないようです。
誰かが私にこれをよりクリーンな方法で達成する方法について正しい方向に向けてくれませんか?
私が試したこと:
GROUP_CONCATを実行して、すべてのユーザーIDといいねを含む文字列を一覧表示し、正規表現を実行してユーザーのIDを見つけて、レビューに投票したかどうかを確認しようとしましたが、これも非常に不潔に感じます。
あなたが提供するかもしれないどんな助けにも前もって感謝します。