Hi all

 

I want to provide a list of up to 20 online users on our network of
football forums, but would like to list those live on the current team
first, before "filling" any remainder with those online using a
different team.  I couldn't see any way of getting it all into one
select (which in English 'speak' would be like "order by team 380, then
get the rest" I suppose?), and saw only the UNION function as the
possible solution.

 

All I'm after, if possible, is to know if I'm using the most efficient
method of retrieving the data, and also whether putting the extra "LIMIT
20" outside the UNION would indeed pick up the first 20 records only,
even though there's a potential for 40.

 

(SELECT user_id, username, last_login FROM users

 WHERE unix_timestamp(last_access) > unix_timestamp()-1440

 AND user_id <> '9' AND last_team = '380' ORDER BY last_login LIMIT 20)

UNION

(SELECT user_id, username, last_login FROM users

 WHERE unix_timestamp(last_access) > unix_timestamp()-1440

 AND last_team <> '380' ORDER BY last_login LIMIT 20) 

LIMIT 20

 

Incidentally, the "user_id <> '25'" is only there to prevent display of
the name of the current online user in the list.

 

Many thanks as always

Gary

Reply via email to