2011-09-09 4 views
1

Donc, j'ai un scénario où il y a de 1 à 8 personnes que j'ai besoin d'interroger jusqu'à 3 choses qu'ils "aimaient" par personne. J'ai la requête mis en place commeComment utiliser MYSQL LIMIT par personne

SELECT liked FROM likeTable WHERE uid IN (uid1,uid2,uid3,uid4) LIMIT 12 

mais évidemment cela peut potentiellement arrêter quand j'ai 12 « aime » pour UID1, laissant le reste à 0. J'ai lu une solution possible en utilisant UNION ALL par exemple ...

(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) 

Et je serais en mesure d'atteindre cet objectif en faisant la chaîne de requête SQL en php avec un forloop, mais est-ce un moyen efficace d'interroger mes données?

Note: Je ne me soucie pas vraiment de l'ordre dans lequel le « aimé » est récupéré, bien que ce serait bien si je pouvais ajouter une ORDER BY likeID DESC, qui est ma colonne autoincrementing

Merci à!

+1

Copie possible de http://stackoverflow.com/questions/2000744/mysql-limit-results-per-category et http://stackoverflow.com/questions/2129693/mysql-using-limit-within-group- by-to-get-n-results-per-group –

+0

Essayez: 'SET @cnt: = 0; SELECT b.liked FROM likeTable un \t INNER JOIN likeTable b SUR a.uid = b.uid ET (@cnt: = @cnt - 1)> 0 où uid IN (uid1, uid2, uid3, uid4) et @ cnt: = 3 LIMIT 12' – Dor

Répondre

0

Pour un petit nombre (pas des centaines, je dirais) de catégories (utilisateurs), il suffit d'utiliser la solution union.

Et serais-je en mesure d'y parvenir en rendant la chaîne de requête sql dans php avec un forloop, mais est-ce un moyen efficace d'interroger mes données?

Certainement oui! Sauf si vous interrogez des centaines d'utilisateurs en une seule fois. Pour 1-8 personnes, c'est juste une solution parfaite!