Distinct-problem

Soapp

Erfahrenes Mitglied
Ich bekomme aus einem JOIN mit 4 Tabellen ein Ergebnis.
vereinfachtes Beispiel:

ID-- Produktname---Produktkategorie------ Hersteller

213 IPOD------------MP3-----------------------MEDIAMARKT
213 IPOD------------MP3-----------------------SATURN


ich möchte nun als Ausgabe:

213 IPOD------------MP3-----------------------SATURN, MEDIAMARKT

Das heisst es sollen alle doppelten Zeilen, bei denen alles ausser dem Hersteller
gleich ist in eine Zeile gefasst werden.
Geht das mit SQL oder muss ich das in PHP lösen ?
Wie könnte ich das machen ?

Danke

Soapp
 
Hallo,

selektiere zusätzlich GROUP_CONCAT(DISTINCT `Hersteller` SEPARATOR ', ') AS `Hersteller` und gruppiere nach ID (davon ausgegangen, dass bei gleicher ID auch Produktname und -kategorie identisch sind).

Grüße,
Matthias
 
Matthias Reitinger hat gesagt.:
Hallo,

selektiere zusätzlich GROUP_CONCAT(DISTINCT `Hersteller` SEPARATOR ', ') AS `Hersteller` und gruppiere nach ID (davon ausgegangen, dass bei gleicher ID auch Produktname und -kategorie identisch sind).

Grüße,
Matthias


versteht das der MSSQL-Server auch ?
anscheinend nicht....
Dann muss ich halt für jede ID die Hersteller abfragen und ausgeben.
Dazu müsste ich die Query so ändern dass er mir alle Zeilen die bis auf den Hersteller identisch sind
in eine Zeile macht.

ID-- Produktname---Produktkategorie------ Hersteller

213 IPOD------------MP3-----------------------MEDIAMARKT
213 IPOD------------MP3-----------------------SATURN


sollte dann ergeben:

213 IPOD------------MP3-----------------------MEDIAMARKT

dann kann ich ja über die ID alle Hersteller abfragen.
Mit DISTINCT schmeisst er mir aber nur die Zeilen raus, wenn alle Spalten komplett identisch sind.

was tun ?


Danke

Soapp
 
Zuletzt bearbeitet:
Hallo,

Soapp hat gesagt.:
versteht das der MSSQL-Server auch ?
anscheinend nicht....
Sorry, aber du hast ja leider nicht erwähnt, dass du MSSQL verwendest.

Das Verhalten von GROUP_CONCAT kann man in MSSQL allerdings nachbilden: http://www.stevenmapes.com/index.ph...QL-GROUP_CONCAT-In-MSSQL-Cross-Tab-Query.html

Mit DISTINCT schmeisst er mir aber nur die Zeilen raus, wenn alle Spalten komplett identisch sind.

was tun ?
Einfach nach ID gruppieren.

Grüße,
Matthias
 
Matthias Reitinger hat gesagt.:
Hallo,

Einfach nach ID gruppieren.

Grüße,
Matthias


danke, aber leider funktioniert das nicht ....

Die P.MODIFIED_TIME-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist.
Die P.NAME-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist.
Die P.COMMENT-Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY-Klausel enthalten ist.

PHP:
SELECT  P.ID, P.MODIFIED_TIME, P.NAME, P.COMMENT, P.CATEGORY_ID as CAT_ID from PRODUCTS as P
JOIN....
JOIN....
group by p.id


Danke, danke, danke


Soapp
 
Sowas wie "GROUP_CONCAT" habe ich ebenso gesucht.
Komisch, dass das nicht in meinem MySQL Buch steht.

Danke danke danke auch von mir!

greetz Hachel
 
Zurück