2016-08-29 5 views
1

Ich habe diese Tabelle: Tabelle 1MySQL - PHP eindeutige Werte aus den Zeilen

+----+-----------------------+----------+------+-------+ 
 
| ID | COUNTRY    | QUANTITY | EACH | PRICE | 
 
+----+-----------------------+----------+------+-------+ 
 
| 1 | U.S.A     |  1 | 12 | 1*12 | 
 
| 2 | U.K.     |  2 | 3 | 2* 3 | 
 
| 3 | GERMANY    | NULL | 3 |  | 
 
| 4 | FRANCE;GERMANY; U.S.A |  0 | 7 |  | 
 
| 5 | U.S.A;GERMANY   |  3 | 8 | 3*8 | 
 
| 6 | FRANCE;U.K.   |  1 | 10 | 1*10 | 
 
| 7 | U.S.A;FRANCE   |  2 | 6 | 2*6 | 
 
| 8 | FRANCE;FRANCE   |  9 | 3 | 9*3 | 
 
+----+-----------------------+----------+------+-------+

und diesen Code sql:

SELECT 
 
    COUNTRY, 
 
    SUM(COALESCE(IF(QUANTITY = NULL OR QUANTITY = 0,1,QUANTITY), 1) * EACH) AS PRICE 
 
FROM table1 
 
GROUP BY COUNTRY

Wie kann ich eindeutige Werte für die Länderspalte erstellen und zurückgeben: USA = 48 (ID: 1 + 5 + 7); UK = 6; DEUTSCHLAND = 3; FRANKREICH = 44 (ID: 4 + 6 + 8). Ich möchte, dass die Reihen, die zwei, drei, vier Länder enthalten, eliminiert werden und nur das erste Land aus der Reihe bleiben soll. Vielen Dank!

+4

Das ist ein schrecklicher Tisch. Sie sollten ein Land pro Zeile COUNTRY haben. Dann beziehen Sie verschiedene Länder durch eine gemeinsame Kartierung. Sie können dies nur tun, indem Sie die Tabelle abfragen und die Strings vergleichen. Was alles über das Datenbankdesign ignoriert. – Aaron

+0

Warten Sie ... möchten Sie Datensätze mit mehr als einem Land _eliminieren oder möchten Sie sie behalten, aber nur das erste Land behalten? –

+0

Sie würden das Datenmodell reparieren, um eine Tabelle mit einer Zeile pro 'ID' und Land zu haben. Das ist die SQLish-Methode zum Darstellen einer Liste - keine getrennte Trennliste. –

Antwort

4

Verwenden Sie substring_index, um das erste Land in der separaten Liste ; zu erhalten.

SELECT 
    SUBSTRING_INDEX(COUNTRY, ';', 1) AS COUNTRY 
    SUM(IF(QUANTITY IS NULL OR QUANTITY = 0,1,QUANTITY) * EACH) AS PRICE 
FROM table1 
GROUP BY COUNTRY 

Es wäre viel komplizierter sein, wenn Sie alle Zeilen halten wollen, wo jedes Land (in diesem Fall erscheint würde ich es zu tun in PHP, MySQL nicht empfehlen, da MySQL keine eingebaute Möglichkeit hat, tun explode()).

+0

entwerfen 'QUANTITY = NULL' sollte in' QUANTITY IS NULL' geändert werden. Aus diesem Grund hat OP 'COALESCE' verwendet. –

Verwandte Themen