left join und concat()
am 29.04.2006 12:23:46 von Julius Junghans
Hi,
meine DB für eine Bibliothek mit verschiedenen Medien sieht so aus:
http://home.pages.at/metalfan/
item_all_language dient zum speichern aller Sprachen eines items und
item_all_author für alle autoren.
Für eine Suchanfrage hätte ich gerne möglichst viele Informationen mit
einem SQL query....dazu hab ich probiert alle Daten die über FKs in item
verfügen mit LEFT JOINS hinzuzufügen.
Bisher klappt es alle Autoren sowie alle Sprachen in 2 querys anzuzeigen
(der LEFT JOIN für den Medientyp ist hier nicht aufgeführt).
SELECT * ,
GROUP_CONCAT(DISTINCT language.language SEPARATOR ', ') AS Sprachen
FROM item_all_language
LEFT JOIN item ON itemitem_identity = item.item_identity
LEFT JOIN language ON languagelanguage_identity = language.language_identity
GROUP BY item.titel;
SELECT * , GROUP_CONCAT(CONCAT( author.surname, " ",author.first_name)
SEPARATOR ', ')
AS Authors
FROM item_all_author
LEFT JOIN item ON itemitem_identity = item.item_identity
LEFT JOIN author ON authorauthor_identity = author.author_identity
WHERE item.titel LIKE '%Sommer%' GROUP BY item.titel;
Soweit so gut, diese Anfrage funktioniert auch liefert aber pro
Sprache/Autor ein Ergebnis mehr. Wie kann man in dieser Anfrage das
obige GROUP_CONCAT benutzen um alle Sprachen/Autoren jeweils in einem
Feld anzuzeigen?
SELECT * FROM item
LEFT JOIN item_all_author ON item.item_identity =
item_all_author.itemitem_identity
LEFT JOIN author ON item_all_author.authorauthor_identity =
author.author_identity
LEFT JOIN item_all_language ON item.item_identity =
item_all_language.itemitem_identity
LEFT JOIN language ON item_all_language.languagelanguage_identity =
language.language_identity
Julius
Re: left join und concat()
am 30.04.2006 17:40:06 von Julius Junghans
Julius Junghans wrote:
> Hi,
>
> meine DB für eine Bibliothek mit verschiedenen Medien sieht so aus:
>
> http://home.pages.at/metalfan/
>
> item_all_language dient zum speichern aller Sprachen eines items und
> item_all_author für alle autoren.
>
> Für eine Suchanfrage hätte ich gerne möglichst viele Informationen mit
> einem SQL query....dazu hab ich probiert alle Daten die über FKs in item
> verfügen mit LEFT JOINS hinzuzufügen.
> Bisher klappt es alle Autoren sowie alle Sprachen in 2 querys anzuzeigen
> (der LEFT JOIN für den Medientyp ist hier nicht aufgeführt).
>
> SELECT * ,
> GROUP_CONCAT(DISTINCT language.language SEPARATOR ', ') AS Sprachen
> FROM item_all_language
> LEFT JOIN item ON itemitem_identity = item.item_identity
> LEFT JOIN language ON languagelanguage_identity = language.language_identity
> GROUP BY item.titel;
>
>
> SELECT * , GROUP_CONCAT(CONCAT( author.surname, " ",author.first_name)
> SEPARATOR ', ')
> AS Authors
> FROM item_all_author
> LEFT JOIN item ON itemitem_identity = item.item_identity
> LEFT JOIN author ON authorauthor_identity = author.author_identity
> WHERE item.titel LIKE '%Sommer%' GROUP BY item.titel;
>
> Soweit so gut, diese Anfrage funktioniert auch liefert aber pro
> Sprache/Autor ein Ergebnis mehr. Wie kann man in dieser Anfrage das
> obige GROUP_CONCAT benutzen um alle Sprachen/Autoren jeweils in einem
> Feld anzuzeigen?
>
> SELECT * FROM item
> LEFT JOIN item_all_author ON item.item_identity =
> item_all_author.itemitem_identity
> LEFT JOIN author ON item_all_author.authorauthor_identity =
> author.author_identity
> LEFT JOIN item_all_language ON item.item_identity =
> item_all_language.itemitem_identity
> LEFT JOIN language ON item_all_language.languagelanguage_identity =
> language.language_identity
>
>
> Julius
SELECT titel,item_identity,type,
GROUP_CONCAT(DISTINCT(CONCAT(author.surname, " ",author.first_name))) AS
Autoren, GROUP_CONCAT(DISTINCT language) AS Languages FROM item
LEFT JOIN item_all_author ON item.item_identity =
item_all_author.itemitem_identity
LEFT JOIN author ON item_all_author.authorauthor_identity =
author.author_identity
LEFT JOIN item_all_language ON item.item_identity =
item_all_language.itemitem_identity
LEFT JOIN language ON item_all_language.languagelanguage_identity =
language.language_identity
LEFT JOIN mediatype ON item.mediatypemediatype_identity =
mediatype.mediatype_identity
GROUP BY item.titel;
Das wars auch schon.