2009-02-03 17 views
1

WOW! C'est un titre étrange, mais je suis content que tu regardes, parce que je n'ai pas trouvé d'autre moyen de le dire. J'ai un tableau de personnes et un tableau de liens vers des photos et des vidéos. Je rejoins les gens dans les médias, et bien sûr, une personne peut avoir plus d'un média.compte mysql seulement pour les valeurs distinctes dans la requête jointe

Je tente d'attraper les 30 premières personnes et tous leurs médias dans une requête, mais quand je dis LIMIT 0,30. Bien sûr, je ne recevrai que les 30 premiers fichiers médias, ce qui pourrait être 10 personnes.

Avant de faire la requête, je ne sais pas combien de fichiers multimédia chaque personne va avoir. Y at-il un moyen que je peux dire LIMIT DISTINCT (uid 0,30) ????

ou quelque chose comme ça?

Répondre

4

Pouvez-vous utiliser des sous-requêtes dans votre version de MySQL?

select * 
from media m 
inner join 
    (select uid 
    from users_tbl 
    limit 0,30) map 
    on map.uid = m.uid 
inner join users_tbl u 
    on u.uid = m.uid 
+0

C'est la manière de le faire si vous pouvez utiliser des sous-requêtes. Bonne réponse AviewAnew. –

+0

merci AvewAnew, toujours en train d'apprendre mes inners et outers, et je me suis dit que ça devait être quelque chose comme ça. Je ne l'ai pas parfaitement fonctionné, mais je suis sur la bonne voie grâce à vous. – pedalpete

+0

MySQL 4.1 a des sous-requêtes supportées, en version générale, depuis 2004-10-23. C'est il y a plus de quatre ans! –

1

FWIW, voici une autre requête qui devrait retourner le même résultat:

SELECT * 
FROM media m INNER JOIN users_tbl u USING (uid) 
WHERE u.uid IN (SELECT uid FROM users_tbl ORDER BY uid LIMIT 0,30); 

Notez que lorsque vous utilisez LIMIT, vous devriez toujours utiliser un ORDER BY. Sinon, il n'y a aucune garantie dont trente utilisateurs vous obtiendrez.