2011-09-09 1 views
1

私は、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を、追加することができれば、それはいいだろうが、私は本当に、「気に入った」取得される順番は気にしません!

+1

可能な複製http://stackoverflow.com/questions/2000744/mysql-limit-results-per-categoryおよびhttp://stackoverflow.com/questions/2129693/mysql-using-limit-within-group-グループごとの結果を得るために –

+0

次のようにしてください: '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

答えて

0

カテゴリ(ユーザー数)が少ない(数百ではありません)場合は、ユニオンソリューションを使用してください。

これを実現するには、forループでphpでsqlクエリ文字列を作成しますが、これはデータをクエリする効率的な方法ですか?

Definitelly yes!一度に数百人のユーザーに問い合わせをしない限り。 1〜8名のお客様には、完璧なソリューションです!

関連する問題