mysql - zwei - sql tabellen verknüpfen ohne join




Kann ich mehrere MySQL-Zeilen in einem Feld verketten? (6)

Alternative Syntax zum Verketten mehrerer einzelner Zeilen

WARNUNG: Dieser Beitrag macht hungrig.

Gegeben:

Ich wollte mehrere einzelne Zeilen anstelle einer Gruppe auswählen und auf einem bestimmten Feld verketten.

Nehmen wir an, Sie haben eine Tabelle mit Produkt-IDs und deren Namen und Preisen:

+------------+--------------------+-------+
| product_id | name               | price |
+------------+--------------------+-------+
|         13 | Double Double      |     5 |
|         14 | Neapolitan Shake   |     2 |
|         15 | Animal Style Fries |     3 |
|         16 | Root Beer          |     2 |
|         17 | Lame T-Shirt       |    15 |
+------------+--------------------+-------+

Dann hast du eine schicke Ajax, die diese Welpen als Checkboxen anzeigt.

Dein hungriger Flusspferd wählt 13, 15, 16 . Kein Dessert für sie heute ...

Finden:

Eine Möglichkeit, die Reihenfolge Ihres Benutzers in einer Zeile mit reinem MySQL zusammenzufassen.

Lösung:

Verwenden Sie GROUP_CONCAT mit der IN Klausel :

mysql> SELECT GROUP_CONCAT(name SEPARATOR ' + ') AS order_summary FROM product WHERE product_id IN (13, 15, 16);

Welche Ausgänge:

+------------------------------------------------+
| order_summary                                  |
+------------------------------------------------+
| Double Double + Animal Style Fries + Root Beer |
+------------------------------------------------+

Bonuslösung:

Wenn Sie auch den Gesamtpreis möchten, werfen Sie SUM() :

mysql> SELECT GROUP_CONCAT(name SEPARATOR ' + ') AS order_summary, SUM(price) AS total FROM product WHERE product_id IN (13, 15, 16);
+------------------------------------------------+-------+
| order_summary                                  | total |
+------------------------------------------------+-------+
| Double Double + Animal Style Fries + Root Beer |    10 |
+------------------------------------------------+-------+

PS: Entschuldigung, wenn Sie kein In-N-Out in der Nähe haben ...

Mit MySQL kann ich Folgendes tun:

SELECT hobbies FROM peoples_hobbies WHERE person_id = 5;

Meine Ausgabe:

shopping
fishing
coding

aber stattdessen möchte ich nur 1 Reihe, 1 Spalte:

Erwartete Ausgabe:

shopping, fishing, coding

Der Grund ist, dass ich mehrere Werte aus mehreren Tabellen auswähle, und nach all den Joins habe ich viel mehr Zeilen, als ich möchte.

Ich habe nach einer Funktion in MySQL Doc gesucht, und es sieht nicht so aus, als ob die CONCAT oder CONCAT_WS Funktionen Ergebnismengen akzeptieren, also weiß hier jemand, wie man das macht?



In meinem Fall hatte ich eine Reihe von Ids, und es war notwendig, es in Char zu konvertieren, ansonsten wurde das Ergebnis in Binärformat codiert:

SELECT CAST(GROUP_CONCAT(field SEPARATOR ',') AS CHAR) FROM table

Schauen Sie sich GROUP_CONCAT wenn Ihre MySQL-Version (4.1) dies unterstützt. Weitere Informationen finden Sie in GROUP_CONCAT .

Es würde ungefähr so ​​aussehen:

  SELECT GROUP_CONCAT(hobbies SEPARATOR ', ') 
  FROM peoples_hobbies 
  WHERE person_id = 5 
  GROUP BY 'all';

Sie können die maximale Länge des GROUP_CONCAT Werts GROUP_CONCAT , indem Sie den Parameter group_concat_max_len .

Siehe Details in der GROUP_CONCAT .


Versuche dies:

DECLARE @Hobbies NVARCHAR(200) = ' '

SELECT @Hobbies = @Hobbies + hobbies + ',' FROM peoples_hobbies WHERE person_id = 5;






group-concat