2017-10-29 1 views
2

Ich habe diese relationale Datenbank mit 3 Tabellen:
MYSQL: Ausgabeliste mit Bedingung

Tabelle Mitglieder

id member 
1 Tina 
2 John 
3 Ellis 
4 Dave 

Projekte Tabelle

id name  year 
1 summer 2014 
2 spring 2015 
3 winter 2016 

Abonnenten Tabelle

id members_id project_id 
1  1   2 
2  1   3 
3  2   1 
4  2   3 
5  3   1 
6  4   2 
7  4   1 

Wh Ich suche nach einer MYSQL-Abfrage, die pro Mitglied das neueste Projekt, das sie abonniert haben, ausgibt. So ist die Abfrage dieses Ergebnis geben wird:

member  name 
Tina  winter 
John  winter 
Ellis  summer 
Dave  spring 

Ich habe diese Abfrage

SELECT members.member, projects.name 
FROM members 
JOIN subscribers ON members.id = subscribers.members_id 
JOIN projects ON projects.id = subscribers.projects_id 

Aber das gibt mir 7 Reihen mit den Mitgliedern und ihren jeweiligen Projekten Namen. Ich möchte nur die 4 Mitglieder mit ihrem neuesten Projektnamen wie oben erwähnt.

Was fehlt mir?

Antwort

1

sollte diese Arbeit:

SELECT `members`.`member`, `projects`.`name` 
FROM `members` 
    JOIN (SELECT `members_id` , MAX(`project_id`) AS `project_id` 
     FROM `subscribers` GROUP BY subscribers.`members_id`) AS `latest` 
    ON `members`.`id` = `latest`.`members_id` 
    JOIN `projects` ON `projects`.`id` = `latest`.`project_id` 
ORDER BY `members`.`id`; 
+0

Großartig! Das Hinzufügen von 'AS project_id' hat es geschafft. – Jojoseph

1
SELECT members.member, projects.name 
FROM members 
JOIN (SELECT members_id, MAX(project_id) AS projects_id FROM 
     subscribers GROUP BY members_id) S 
ON members.id = s.members_id 
JOIN projects 
ON projects.id = s.projects_id 

Die obige Abfrage wird unter der Annahme arbeitet, dass in Project Tabelle als id Anstieg Year auch erhöhen (oder nicht abnehmen).

+0

Ihre Abfrage gibt eine Fehlermeldung: "Unknown column 's.projects_id' in 'on-Klausel'" Und in der Tat: Jedes neue Projekt wird das Jahr erhöhen. – Jojoseph

+0

@Jojoseph 'MAX (project_id) als projects_id' –