pauls1
Goto Top

Select Statement

Hallo,

ich bin neu hier im Forum und habe schon gleich folgende Frage.

Und zwar habe zwei Tabellen ('post' und 'post_tag').
In 'post' speichere ich jeglich relevantes zum Post, wie den geschrieben Text..
Zu jedem Post kann man zugleich noch mehrere Tags hinzufügen, wie PhP MySQL...,
welche in 'post_tag' gespeichert werden.
Die beiden Tabellen hängen über die 'post_id' zusammen.


Nun zu meinem Problem.
Bisher habe ich zuerst über Select mir passend zu einem Muster alle Posts von 'post' geholt,
(also ich weiß von vornherein nicht die 'post_id', da sie in Abhängigkeit zur zeit geholt werden)
und danach nach Auswertung des Ergebnisses alle Tags über Select..in() geholt.

Meine konkrete Frage hierbei ist es, kann man innerhalb eines Statements die 'post' daten holen und zugleich alle relevanten 'post_tag' daten welche allerdings dann ein array darstellen würden.


tabelle 'post':

id | text
5 | 'test'
6 | 'blabla'


tabelle 'post_tag':


post_id | tag
5 | 'php'
5 | 'test'
6 | 'mysql'


und dass ich innerhalb einer Abfrage dann Ergebnisse bekomme welche alle Tags von 'post_tag' mit den Daten von 'post' "verbinden".


Hoffe es wurde einigermaßen ersichtlich was ich meine/suche.

Mit freundlichen Grüßen und schonmal Dankeschön für eure Hilfe,

Pauls

Content-Key: 240730

Url: https://administrator.de/contentid/240730

Printed on: April 16, 2024 at 05:04 o'clock

Member: geocast
geocast Jun 12, 2014 at 13:42:26 (UTC)
Goto Top
Also ist die post_id der Fremdschlüssel von post?

Wenn ja:

SELECT post.text, post_tag.tag
FROM post INNER JOIN post_tag ON post.id = post_tag.post_id

Aber mir sieht das noch etwas unlogisch aus, wie die Tabelle aufgebaut ist.
Member: pauls1
pauls1 Jun 12, 2014 at 14:05:46 (UTC)
Goto Top
hey,

an sich funktioniert das nur bekomme ich ja dann für jeden tag einen text aus 'post', d.h ich bekomme für einen post welcher mehrere tags hat auch soviele tags wie dieser post hat, also auch soviele texte zurück.Sprich auf das obige Beispiel wäre das Ergebnis:

id | text | tag
5 | 'test' | 'php'
5 | 'test' | 'test'
6 | 'blabla' | 'mysql'

und ich würde gerne wissen ob man das doppelt aufkommen der beiden texte mit der id '5' vermeiden kann.

Inwiefern unlogisch ?

Grüße,

Pauls
Member: geocast
geocast Jun 12, 2014 at 14:10:55 (UTC)
Goto Top
Gleiche Abfrage, nur eine kleine änderung

SELECT post.text, post_tag.tag
FROM post LEFT JOIN post_tag ON post.id = post_tag.post_id

Falls das nicht geht probier ein

GROUP BY post.id

am Ende aus
Member: pauls1
pauls1 Jun 12, 2014 at 14:17:59 (UTC)
Goto Top
danke face-smile
ich habs jetzt anders gelöst mit array_agg()