2016-05-17 6 views
0
---------- ---------- ---------- ----------  
| t1  | | t2  | | t3  | | t4  | 
---------- ---------- ---------- ---------- 
| id  | | id  | | id  | | t1_id | 
| foo | | bar | | foobar | | t2_id | 
---------- ---------- ---------- | t3_id | 
             ---------- 

Ich habe diesen Satz von Tabellen, und mit dieser speziellen Abfrage:SELECT-Abfrage Gruppierung/Verschmelzung für nicht-DISTINCT Ergebnis gesetzt

SELECT foo, bar, foobar VON T4
LEFT JOIN t1 ON t1.id = t4.t1_id
LINKE VERBINDUNG t2 EIN t2.id = t4.t2_id
LINKE VERBINDUNG t3 EIN t3.id = t4.t3_id;

dann könnte ich mit diesem Ergebnis Set kommen:

------------------------------  -------------------------------   
| foo | bar  | foobar | => | foo  | bar  | foobar | 
------------------------------  ------------------------------- 
| x  | y  | a  |  | x  | y  | a  | 
| x  | y  | b  |  |   |   | b  | 
| x  | y  | c  |  |   |   | c  | 
------------------------------  ------------------------------- 

Frage ist: Wie kann ich meine Abfrage irgendwie Gruppe formatiert diese Spalten mit ähnlichen Einträgen, aber nicht diejenigen, die nicht sind? Ist das überhaupt möglich in MySQL? Ich gebe dies durch PHP aus, sollte ich also PHP seine Formatierung behandeln lassen?

Gleiche Frage, wenn es vonPHP gehandhabt werden sollte.

+0

, wenn Sie am Ende der Abfrage 'Gruppe von foo sagen, bar' können Sie in der Auswahlliste' foobar' zu 'Group_concat (foobar) foobar' ändern Sie es in Form zu erhalten' a, b, c ' – splash58

+0

Ich denke, Sie sollten mit PHP-Side-Logik gehen, dh Wert des ersten Abruf Datensatz speichern und mit anderen Datensätzen übereinstimmen, wenn gefunden, dann nicht drucken oder zeigen andere weise zeigen es. –

+0

Auch wenn es mit MySQL möglich ist, sollte die Darstellung Ihrer Daten nicht in der Verantwortung der Datenbank liegen. PHP ist dafür viel besser geeignet. – apokryfos

Antwort

1

Sie sollten PHP die Formatierung behandeln lassen. Im Allgemeinen stellen SQL-Ergebnismengen (und Tabellen) ungeordnete Sets dar. Ihre Formatierung berücksichtigt eine bestimmte Reihenfolge.

Es könnte helfen, die Werte in einer Reihe, mit der dritten Spalte als „Liste“ zu setzen:

SELECT foo, bar, GROUP_CONCAT(foobar) as foobars 
FROM t4 LEFT JOIN 
    t1 
    ON t1.id = t4.t1_id LEFT JOIN 
    t2 
    ON t2.id = t4.t2_id LEFT JOIN 
    t3 
    ON t3.id = t4.t3_id 
GROUP BY foo, bar; 

Das heißt, es ist möglich zu tun, was Sie in MySQL wollen (Variablen zum Beispiel), aber PHP ist der bessere Ort für die Formatierung.

+0

dies! gab die erwarteten Ergebnisse zurück, die ich möchte. – Valkyrurr

0
SELECT distinct foo, bar, foobar FROM t4 
LEFT JOIN t1 ON t1.id = t4.t1_id 
LEFT JOIN t2 ON t2.id = t4.t2_id 
LEFT JOIN t3 ON t3.id = t4.t3_id; 
Verwandte Themen