MYSQL nur die page_id ausgeben welche die kleinste section_id hat

azoo

Mitglied
Ein frohes neues Jahr und gleich ein Problem welches mich schon im alten Jahr geärgert hat.
Eventuell könnt ihr mir auf die Sprünge helfen
Mein Inner Join query liefert mir folgendes Ergebnis:
Code:
+----------------------------------------------------------------------+
| page_title            | page_id | section_id              |
+------------------------+------------+------------------------------+
| Kontakte	           | 16          |	16                      |
| Vita	              | 23          |	23                      |
| Wir über uns       | 24          |	24                      |
| Wir über uns       | 24          |	212                    | 
+------------------------+------------+-------------------------------+

Ich möchte meine Abfrage in sofern optimieren, das mir nur die page_id geliefert wird die die kleinste section_id hat.
Oder anders gesagt in diesem Ergebnis sollte nur der Eintrag page_id/24 mit section_id/24 stehen nicht auch der Eintrag page_id/24 mit section_id/212

Hier mein Query:
Code:
select wb_pages.page_title, modul.page_id, modul.section_id  from wb_pages
inner join wb_mod_wysiwyg AS modul
ON wb_pages.page_id = modul.page_id
WHERE wb_pages.parent = 15

Bin auf eure Anregungen seeehr gespannt, ich bin am Ende meines Wissens

Gruß azoo
 
Zuletzt bearbeitet:
So ganz spontan würde mir folgendes einfallen:
Code:
select wb_pages.page_title, modul.page_id, modul.section_id  from wb_pages
inner join wb_mod_wysiwyg AS modul
ON wb_pages.page_id = modul.page_id
WHERE wb_pages.parent = 15 GROUP BY page_id
 
Ja, GROUP BY hatte ich auch schonmal im Kopf aber in keiner meiner gefunden Dokumentationen über diese Klausel ergab es sich mir, wie dieses genau funktioniert und Einfluß auf die Abfrage hat.
Ist es jetzt Zufall das die page_id mit der kleinsten section_id selektiert wird oder lässt sich das immer reproduzieren?
Mir ist dabei noch nicht ganz wohl, eventuell erklärst du/ihr mir, wie es sich hier auswirkt.

Gruß azoo
 
Naja, die Group by funktion gruppiert die Werte halt. Dabei wird dann der Wert der anderen Spalten ausgegeben, die an erster Stelle kommen. Wnn jetzt Bsp.weise 212 über der 24 gestanden hätte, würde die 212 stehen. Daher musst du schauen, das du das ganze Ding noch sotiert bekommst, aber Order by und dann group by gehen nicht :(. Wenn du Pech hast, musst du einen Unterselect oder so machen. Vielleicht ist auch die Möglichkeit das ganze in zwei Schritten zu machen akzeptabel. Wenn ich was in php programmiere arbeite ich manchmal so, weil es doch ab und zu einfacher ist
 
Ja, ich dachte mir schon das es so nicht ganz wasserdicht ist. Es funktioniert zwar so aber wie du schon sagtest nur weil die section_id 24 über der 212 stand.
Bleibe mal gespannt ob noch ein Ansatz kommt.

Gruß azoo
 
Na ne überlegung wäre bei der Selct anweisung die selection_id in das Min setzen:

Code:
MIN(modul.section_id)

und dann halt mit group by gekoppelt
 
würde das nicht zu einem einzelnen Ergebnis führen also der kleinsten section_id der Tabelle?
Sorry wenn ich das falsch sehe, ich muß mir das mit "group by" heute abend nochmal zu Gemüte führen.
 
Einfach kombinieren
SQL:
SELECT 
	wb_pages.page_title, 
	wb_pages.page_id, 
	MIN(modul.section_id) AS min_section_id
FROM
	wb_pages
	INNER JOIN wb_mod_wysiwyg AS modul
		ON wb_pages.page_id = modul.page_id
WHERE 
	wb_pages.parent = 15
GROUP BY
	wb_pages.page_title, 
	wb_pages.page_id
 
Zuletzt bearbeitet von einem Moderator:
Zurück