Mehrfache Datenausgabe

Gunah

Erfahrenes Mitglied
Moin wir wollen hier mit Hilfe von PHP5+MySQL einen SQL String auslesen der in 3 Tabellen steht

also so ist es in der Konstruktion der DB:
table 1 = Kategorien
-- id
-- name
table 2 = Einträge
-- id
-- name
table 3 = gruppen zuordnung
-- id (table 2)
-- id (table 1)

nun wollen wir beim ausgeben, das alles in einem Row kommt wenn der Jenige in mehreren gruppen ist, sprich mit einer Unterabfrage...
mit LEFT JOIN geht es nicht, da dort der Benutzer ja in mehr als nur einem Row wieder geben wird...

ich hoffe ihr versteht mein Anliegen

Gruß
Gunah
 
Hi
Danke für deine Antwort aber bei der Abfrage würde jeder Name, wenn er mehrfach eingetragen ist in der table3... auch mehr fach ausgegeben werden...

wir habe das hier auch schon mal gemacht... nur ist es einfach zu lang her :)

deine Abfrage währe ja LEFT JOIN damit geht es leider nicht die Ausgabe sollte wie folgt sein

Name der Person
Inahlt der Table1
Inhalt der Table1 #2
...

und nicht
Name der Person
Inhalt der Table1
Name der Person
Inhalt der Table1 #2


Gruß
Gunah
 
Hmm ok :-)

aber ich denke das wird sich mit bestehender Datenbanktechnologie nicht umsetzen lassen. Obwohl ich zugeben muss auch seit einem Jahr nicht mehr "rein SQL" gescriptet zu haben zurzeit spielt sich bei mir alles in PHP ab.
 
nja erstmal totzdem danke :)

mache es dann innerhalb der WHILE... nochmal ein String... wo die restlichen daten gecheckt werden... wie das in der Suche dann läuft muss ich mir dann noch überlegen denke per Radio Box
 
Ist Group_Concat das was du suchst?
SQL:
select t1.name,group_concat(t2.name)
from table1 t1
left join table3 t3 on t1.id = t3.id_table1
left join table2 t2 on t2.id = t3.id_table2
group by t1.name
 
Zuletzt bearbeitet:
Also....

a) ich glaube ich habe erkannt was Gunah möchte.
b) ja es geht, wobei ich dringend empfehle die Struktur/ Lösung zu überdenken...aber das sagt ja jeder in so einem Fall.

Hier also eine mögliche Lösung (nicht toll aber die einzige, die mir einfällt ohne die Aufgabenstellung zu vernachlässigen).

Es gibt 3 Tabellen
- zwei Tabellen speichern lediglich eine key->wert Kombination
- die dritte Tabelle stellt die m:n Relation zwischen diesen beiden dar.

Ich mache das hier mal mit Beispieltabellen/Datensätzen.

Tabelle 1:
schueler [schueler_id (int), schueler_name (varchar)]
id | name
-------------
1 | Mark
2 | Thomas​

Tabelle 2:
kurse [kurse_id (int), kurse_name (varchar)]
id | name
-------------
1 | tanzen
2 | boxen​

Tabelle 3:
schueler2kurse [id_kurse (int), id_schueler (int)]
id_kurse | id_schueler
--------------------------------
1 | 1
2 | 2
2 | 1​

Das heißt:
der Schueler Mark hat Tanzen und Boxen belegt
der Schueler Thomas hat nur Tanzen belegt

Wenn ich nun eine Abfrage gestalten möchte, bei der ich Spalten einer Tabelle mehrfach in der Ergebnismenge sehen möchte, muss ich diese Tabelle auch mehrfach joinen.

Ein SQL-Statement, welches das gewünschte Ergebnis liefert ist nun das folgende:

PHP:
SELECT 
schueler.schueler_name AS schueler, 
sum( kurs1.kurse_id =1 ) AS tanzen, 
sum( kurs2.kurse_id =2 ) AS boxen
FROM 
schueler
LEFT JOIN 
schueler2kurse ON schueler.schueler_id = schueler2kurse.id_schueler
LEFT JOIN 
kurse AS kurs1 ON schueler2kurse.id_kurse = kurs1.kurse_id
LEFT JOIN 
kurse AS kurs2 ON schueler2kurse.id_kurse = kurs2.kurse_id
GROUP BY 
schueler.schueler_id

Dein Ergebnis sieht dann wie folgt aus:

schueler | tanzen | boxen
------------------------------------
Mark | 1 | 1
Thomas | 1 | 0

Du müsstest es dann auf Deine Bedürfnisse anpassen, aber es ist weder pflegeleicht noch sehr komfortabel. Ich dachte lediglich es wäre gut, wenn man mal sieht, dass es sehr wohl möglich ist mehrere Ergebnisse in einer Zeile zuhaben (aber um welchen Preis)

Viele Grüße
jrook
 
Zurück