2016-03-26 3 views
1

Ich habe Probleme bei der Suche nach einer Antwort auf diese Frage, wegen meiner Unkenntnis über die Terminologie und SQL, obwohl ich weiß, dass es wahrscheinlich existiert . Ich habe eine Datenbank mit den folgenden Tabellen:
desc pkm;Merge Daten von zwei Zellen aus der gleichen Spalte in verschiedenen Zeilen in MySQL/MariaDB

+-----------------+---------------+------+-----+---------+-------+ 
| Field   | Type   | Null | Key | Default | Extra | 
+-----------------+---------------+------+-----+---------+-------+ 
| pkm_code  | int(11)  | NO | PRI | NULL |  | 
| pkm_name  | varchar(32) | NO | UNI | NULL |  | 
| pkm_category | varchar(32) | NO |  | NULL |  | 
| pkm_description | varchar(1280) | NO |  | NULL |  | 
| pkm_weight  | float   | NO |  | NULL |  | 
| evolution_code | int(11)  | YES | MUL | NULL |  | 
+-----------------+---------------+------+-----+---------+-------+ 

desc poketype;

+---------------------+------------+------+-----+---------+-------+ 
| Field    | Type  | Null | Key | Default | Extra | 
+---------------------+------------+------+-----+---------+-------+ 
| pkm_code   | int(11) | NO | PRI | NULL |  | 
| type_code   | int(11) | NO | PRI | NULL |  | 
| poketype_is_primary | tinyint(1) | NO |  | NULL |  | 
+---------------------+------------+------+-----+---------+-------+ 

desc type;

+-----------+-------------+------+-----+---------+-------+ 
| Field  | Type  | Null | Key | Default | Extra | 
+-----------+-------------+------+-----+---------+-------+ 
| type_code | int(11)  | NO | PRI | NULL |  | 
| type_name | varchar(32) | NO | UNI | NULL |  | 
+-----------+-------------+------+-----+---------+-------+ 

Und bisher habe ich den folgenden SQL-Befehl:

SELECT pkm.pkm_code, pkm.pkm_name,type.type_name FROM poketype 
    JOIN pkm ON pkm.pkm_code=poketype.pkm_code 
    JOIN type ON poketype.type_code=type.type_code 
    WHERE pkm.pkm_code<=151 
    ORDER BY pkm_code; 

, die die primären und sekundären Typen in separaten Zeilen anzeigt.
Wie würde ich beide Typen für die Dual-Typ-Pokemon in der gleichen Zeile anzeigen lassen?

Mein aktuelles Ergebnis:

+-----------+-------------+-----------+ 
| pkm_code | pkm_name | type_name | 
+-----------+-------------+-----------+ 
| 1   | Bulbasaur | grass  | 
| 1   | Bulbasaur | poison | 

Wunschergebnisse:

+-----------+-------------+-------------+ 
| pkm_code | pkm_name | type_name | 
+-----------+-------------+-------------+ 
| 1   | Bulbasaur | grass,poison| 

(Ja, bulbasaur ein Dual-Typ war ich zu überrascht.!)

+1

Bearbeiten Sie Ihre Frage und liefern Sie Beispieldaten und gewünschte Ergebnisse. –

Antwort

2

Verwenden mysql group_concat() function Werte zu kombinieren aus verschiedenen Datensätzen in einem einzigen Wert:

SELECT pkm.pkm_code, pkm.pkm_name, group_concat(type.type_name) as typename FROM poketype 
    JOIN pkm ON pkm.pkm_code=poketype.pkm_code 
    JOIN type ON poketype.type_code=type.type_code 
    WHERE pkm.pkm_code<=151 
    GROUP BY pkm.pkm_code, pkm.pkm_name; 
+0

Sorry, das funktioniert nicht wirklich. Es concats * alles * in der Spalte, ich nur die Zellen in 'poketype', wo' pkm_code' ist das gleiche zu concated –

+0

Ich denke, Sie haben die Gruppe von Klausel verpasst. Es ist in der letzten Zeile der Abfrage in meiner Antwort. – Shadow

+0

Oh! Es funktionierte! Vielen Dank! –

Verwandte Themen