tags:

views:

486

answers:

2

WOW! That's a weird title, but I'm happy you're looking, cause I couldn't find another way to say it.

I have a table of people and a table of links to photos and videos. I join the people to the media, and of course a person can have more than one piece of media.

I am attempting to grab the first 30 people and all of their media in one query, but when I say LIMIT 0,30. Of course I'll only get the first 30 media files, which could be 10 people.

Before I make the query, I don't know how many media files each person is going to have. Is there a way I can say LIMIT DISTINCT(uid 0,30)????

or something like that?

+3  A: 

Can you use subqueries in your version of 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
Tom Ritter
this is the way to do it if you can use sub-queries. Good answer AviewAnew.
Berek Bryan
thanks AvewAnew, still learning my inners and outers, and I figured it had to be something like that. Haven't got it working perfectly, but I'm on the right track thanks to you.
pedalpete
MySQL 4.1 has supported subqueries, in general release, since 2004-10-23. That's over four years ago!
Bill Karwin
+1  A: 

FWIW, here's another query that should return the same result:

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

Note that when you use LIMIT, you should always use an ORDER BY. Otherwise there is no guarantee which thirty users you'll get.

Bill Karwin