Domanda

Si supponga che ho questi tavoli, da cui ho bisogno di risultati di ricerca di visualizzazione in un browser:

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

Ho bisogno di output che assomiglia a questo:

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

La parte importante è che ogni tipo di elemento ottiene solo record / riga nel ritorno sullo schermo. Ho compiuto questo in passato restituendo più righe dello stesso elemento e utilizzando un linguaggio di scripting per limitare l'output. Tuttavia, ciò rende l'interfaccia utente eccessivamente complicato e loopy. Quindi, spero che posso ottenere il database di sputare solo come molti record in quanto vi sono righe da visualizzare.

Questo esempio può essere un po 'estrema causa del 2 join necessaria per raggiungere il contenitore dalla voce (tramite la tabella di vendita).

sarei felice solo per un esempio di query che emette questo:

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

I può restituire solo un singolo risultato in una subquery, quindi non sono sicuro di come fare questo.

È stato utile?

Soluzione

Supponendo che si sta utilizzando MySQL (delle quattro domande che avete, solo uno è contrassegnati come MySQL), il funzione group_concat è quello che stai dopo:

  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

Se si desidera che gli elementi che potrebbero non avere collegamenti alle vendite e / o contenitori tavoli -. Add "LEFT" di fronte al "JOIN"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top