私は、1人あたり「好きな」3つのものを質問する必要がある1-8人の人がいるというシナリオがあります。私は、クエリが一人につきMYSQL LIMITの使い方
SELECT liked FROM likeTable WHERE uid IN (uid1,uid2,uid3,uid4) LIMIT 12
として設定しているが、私は12を持っている場合、明らかに、これは潜在的に停止することができ、私は例えばUNION ALLを使用するなど、可能な解決策を読ん0で残りの部分を残して、UID1のために「好き」...
(SELECT liked FROM likeTable WHERE uid = uid1 LIMIT 3)
UNION ALL
(SELECT liked FROM likeTable WHERE uid = uid2 LIMIT 3)
UNION ALL
(SELECT liked FROM likeTable WHERE uid = uid3 LIMIT 3)
UNION ALL
(SELECT liked FROM likeTable WHERE uid = uid4 LIMIT 3)
と私はforloopとPHPでのSQLクエリ文字列を作ることによってこれを達成することができるだろうが、これは私のデータをクエリの効率的な方法は何ですか?
注:私は私の自動インクリメント列
おかげでlikeID DESC BY ORDERを、追加することができれば、それはいいだろうが、私は本当に、「気に入った」取得される順番は気にしません!
可能な複製http://stackoverflow.com/questions/2000744/mysql-limit-results-per-categoryおよびhttp://stackoverflow.com/questions/2129693/mysql-using-limit-within-group-グループごとの結果を得るために –
次のようにしてください: 'SET @cnt:= 0; SELECT b.liked FROM likeテーブル \t INNER JOIN likeテーブルb ON a.uid = b.uid AND(@cnt:= @cnt - 1)> 0 どこのuid(uid1、uid2、uid3、uid4) cnt:= 3LIMIT12' – Dor