2017-08-03 1 views
0

Ich entwickle einen PHP-Skript, und ich habe die folgende Tabelle:MySQL Gruppenzeilen durch eine Spaltensortierung durch eine andere Spalte

+----+-----------+----------+--------------+ 
| id | id_parent | position | feature  | 
+----+------------+---------+--------------+ 
| 1 |  1  | 2  | -B-A-C- | 
| 2 |  1  | 3  | -B-C-  | 
| 3 |  2  | 4  | -C-B-  | 
| 4 |  3  | 1  | -A-B-  | 
| 5 |  1  | 6  | -A-C-  | 
| 6 |  2  | 5  | -C-B-  | 
| 7 |  2  | 7  | -B-C-  | 
| 8 |  3  | 8  | -A-  | 
+----+-----------+----------+--------------+ 

Aus dieser Tabelle würde Ich mag alle Zeilen auszuwählen, mit „Feature“ LIKE "% -A-%", aber zuerst das Ergebnis mit der niedrigsten "Position" anzeigen, dann alle Zeilen, die denselben Wert für die Spalte "id_parent" des ersten Ergebnisses haben, dann Zeile mit der zweitniedrigsten "Position" und alle

+----+-----------+----------+--------------+ 
| id | id_parent | position | feature | 
+----+------------+---------+--------------+ 
| 4 |  3  | 1  | -A-B-  | 
| 8 |  3  | 8  | -A-  | 
| 1 |  1  | 2  | -B-A-C- |  
| 5 |  1  | 6  | -A-C-  | 
+----+-----------+----------+--------------+ 
: Zeilen, die gleiche „id_parent“ des Ergebnisses mit der 2. niedrigsten „Position“, und so weiter haben ... so sollte das Endergebnis sein

Aus irgendeinem Grund kann ich hier nicht erklären, ich muss haben und HAVING-Klausel für die Auswahl der richtigen "Feature" -Wert (... HAVING 'Feature' LIKE '% -A-%' ...).

Ist es möglich, all dies mit MySQL zu machen (möglicherweise ohne Unterabfragen) oder Daten mit PHP zu verarbeiten?

+0

Dies ist ein drastischer Schritt rückwärts. Dies ist ein schlechtes Design. Wenn Sie über mehrere Features verfügen, sollten Sie diese in einer separaten Tabelle speichern - mit einer separaten Zeile für jedes Feature. – Strawberry

Antwort

0

Hilft das? Ich habe den letzten Teil des Problems als eine Übung für den Leser ...

SELECT a.* 
    , c.* 
    FROM my_table a 
    JOIN 
    (SELECT id_parent, MIN(position) position FROM my_table WHERE feature = 'a' GROUP BY id_parent) b 
    ON b.id_parent = a.id_parent 
    AND b.position = a.position 
    JOIN my_table c 
    ON c.feature = a.feature 
    AND c.id_parent = a.id_parent; 
+0

Hallo, ich habe meine Antwort geändert, weil mein tatsächlicher Bedarf darin besteht, ein LIKE für die "Feature" -Spalte zu verwenden, kein einfaches = Vergleich. –

Verwandte Themen