2010-02-01 5 views
0

Je dois écrire une requête et je ne suis même pas sûr de savoir par où commencer. J'ai un ensemble de tables que je n'ai pas créées et que je ne peux pas changer.mysql aide à la requête - jointure compliquée/ordre par scénario

member table 
+----+-------+ 
| id | class | 
+----+-------+ 
| 1 |  1 | 
| 2 |  2 | 
+----+-------+ 

member_data table 
+----+------------+-----------+ 
| id | first_name | last_name | 
+----+------------+-----------+ 
| 1 |  John |  Jones | 
| 2 |  Juan |  Jones | 
+----+------------+-----------+ 

member_entries table 
+----+-----------+-------+------------+ 
| id | member_id | title | date | 
+----+-----------+-------+------------+ 
| 1 |   1 | test1 | 1265042580 | 
| 2 |   1 | test2 | 1265042581 | 
| 3 |   2 | test3 | 1265042582 | 
| 4 |   3 | test4 | 1265042583 | 
+----+-----------+-------+------------+ 

J'ai besoin de sélectionner id, first_name de member_data, le titre le plus récent de member_entries, et le nombre total de member_entries qui correspond à la member_id. Je dois être en mesure de sélectionner où la classe d'un membre est un certain nombre dans la première table. Je dois également être en mesure de commander par l'une de ces colonnes. C'est ce que je dois ma sortie soit, si je choisi les membres où la classe membre est 1.

+----+------------+-------+------------+ 
| id | first_name | title | date | 
+----+------------+-------+------------+ 
| 1 |  John | test2 | 1265042581 | 
+----+------------+-------+------------+ 

Répondre

1
SELECT m.id, md.first_name, me.title, me.date 
FROM member m 
INNER JOIN member_data md ON md.id = m.id 
INNER JOIN member_entries me on me.id = m.id 
WHERE me.date = 
    (SELECT MAX(date) FROM member_entries WHERE id = m.id) 
AND m.class = 1 
1
SELECT member.id, member_data.first_name, member_entries.title, member_entries.date 
FROM member 
INNER JOIN member_data ON member.id = member_data.member_id 
INNER JOIN member_entries ON member.id = member_entries.member_id 
WHERE member.class = 1 
ORDER BY member_entries.date DESC 
LIMIT 1 

et construire WHERE et ORDER BY clauses que vous avez besoin.