Frage

Angenommen ich diese Tabellen haben, von dem ich in einem Browser-Anzeige Suchergebnisse müssen:

Table: Containers

id   |   name
1      Big Box
2      Grocery Bag
3      Envelope
4      Zip Lock


Table: Sale

id  | date     | containerid
1     20100101   1
2     20100102   2
3     20091201   3
4     20091115   4


Table: Items

id  |  name        | saleid
1      Barbie Doll   1
2      Coin          3
3      Pop-Top       4
4      Barbie Doll   2
5      Coin          4

Ich brauche Ausgabe, dass sieht wie folgt aus:

itemid  itemname     saleids      saledates       containerids     containertypes
1       Barbie Doll    1,2    20100101,20100102       1,2       Big Box, Grocery Bag
2       Coin           3,4    20091201,20091115       3,4       Envelope, Zip Lock
3       Pop-Top         4          20091115            4              Zip Lock

Der wichtige Teil ist, dass jeder Elementtyp wird nur einen Datensatz / Zeile in der Rückkehr auf dem Bildschirm. Ich erreichte dies in der Vergangenheit durch mehrere Zeilen des gleichen Elements zurückkehren und mit einer Skriptsprache der Ausgabe zu begrenzen. Allerdings macht dies die ui übermäßig kompliziert und verworren. Also, ich hoffe, dass ich die Datenbank bekommen können nur so viele Datensätze auszuspucken wie es Zeilen angezeigt werden soll.

In diesem Beispiel kann ein bisschen extrem, weil die 2 Joins aus dem Artikel zu dem Behälter erhalten benötigt wird (durch den Verkauf Tabelle).

würde ich für nur ein Beispiel Abfrage glücklich sein, gibt diese:

itemid  itemname     saleids      saledates    
1       Barbie Doll    1,2    20100101,20100102  
2       Coin           3,4    20091201,20091115   
3       Pop-Top         4          20091115       

Ich kann nur ein einziges Ergebnis in einer Unterabfrage zurückgeben, also bin ich nicht sicher, wie dies zu tun.

War es hilfreich?

Lösung

Angenommen, Sie MySQL verwenden (die vier Fragen, die Sie haben, nur eine ist als MySQL markiert), die GROUP_CONCAT Funktion ist, was Sie nach:

  SELECT i.name AS itemname,
         GROUP_CONCAT(s.id ORDER BY s.id) AS salesids,
         GROUP_CONCAT(s.date ORDER BY s.date) AS salesdates,
         GROUP_CONCAT(s.containerid ORDER BY s.containerid) AS containerids,
         GROUP_CONCAT(c.name ORDER BY c.name) AS containertypes
    FROM ITEMS i
    JOIN SALE s ON s.id = i.salesid
    JOIN CONTAINERS c ON c.id = s.containerid
GROUP BY i.name

Wenn Sie Einzelteile möchten, die nicht haben könnten Links zu den Verkaufs- und / oder Container-Tabellen -. Add „LEFT“ vor dem „JOIN“

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top