2011-01-16 3 views
-1
**Table parent** 
parentId | name 

**Table children** 
childId | parentId | pictureId | age 

**Table childrenPictures** 
pictureId | imgUrl 

nein Ich mag würde alle Eltern Namen mit ihrem ältesten Sohn Bild zurückzukehren (nur Eltern zurück, die Kinder haben, und nur Kinder berücksichtigen, die Bilder haben)MySQL SELECT MAX mehrere Tabellen: foreach Eltern älteste Sohn Bild Rück

so dachte ich an so etwas wie:

SELECT c.childId AS childId, 
    p.name AS parentName, 
    cp.imgUrl AS imgUrl, 
    MAX(c.age) AS age 
FROM parent AS p 
    RIGHT JOIN children AS c ON (p.parentId = c.parentId) 
    RIGHT JOIN childrenPictures AS cp ON (c.pictureId = cp.pictureId)) 
GROUP BY p.name 

Diese Abfrage wird jeder Elternteil der älteste Sohn das Alter zurück, aber die childID wird nicht an den ältesten Söhne ID entsprechen, so dass der Ausgang zeigt nicht das richtige Bild Söhne.

+0

Wenn Sie c.parentId in der Gruppierung nach Klausel versuchen? –

Antwort

2

müssen Sie vorab Abfrage pro Familie, das Alter des ältesten Kindes zu erhalten, die ein Bild hat, dann Name/Bildinformation des bekommen Eltern ... so etwas wie ...

select 
     PreQuery.parentID, 
     p.Name ParentsName, 
     c.childID, 
     c.age, 
     cp.imgUrl 
    from 
     (select 
       c.parentID, 
       max(c.age) OldestChildAgeWithPicture 
      from 
       Children c, 
       childrenPictures cp 
      where 
       c.pictureID = cp.pictureID 
      group by 
       c.parentID) PreQuery, 
     Parent p, 
     Children c, 
     ChildrenPictures cp 
    where 
      PreQuery.parentID = p.parentID 
     and PreQuery.parentID = c.parentID 
     and PreQuery.OldestChildAgeWithPicture = c.age 
     and c.pictureID = cp.pictureID 

Die innere Abfrage Vorqualifizieren nur durch Eltern, das höchste Alter des Kindes, das ein Bild existiert ... So, wenn Sie eine Familie mit 3 Kindern haben, hat ältestes kein Bild, 2. ältestes, das zweitälteste ist das, das in der obigen Frage zeigen wird . Was möchten Sie außerdem tun, wenn eine Familie Zwillinge hat und BEIDE Bilder in den Akten haben? Diese Abfrage würde BEIDE Kinder anzeigen, wenn das Alter auf der tatsächlichen Integer-Darstellung basiert. Wenn jedoch das Alter auf der Grundlage der Datumsarithmetik berechnet wird und genauer wäre ... Beispiel: Ein Kind, geboren am 1. Januar des Jahres X, und im selben Jahr ein weiteres Kind, das am 1. Dezember geboren wurde .... Ab Dezember würden sie es tun das gleiche ganzzahlige Alter sein, aber eins offensichtlich 11 Monate älter als das andere.

Darüber hinaus, wenn Sie die älteste REGARDLESS ein Bild haben möchten, müsste die obige Abfrage nur geringfügig geändert werden ... lassen Sie mich wissen, wenn dies das ist, was Sie suchen.

0

Nicht sicher, aber ein paar Notizen: - Da Sie nur Eltern mit passenden Kindern zurückgeben möchten, können Sie nur beitreten. - Können Sie versuchen, Gruppe von c.parentID anstelle von Gruppe von p.name?