Question

Supposons que j'ai ces tableaux, dont j'ai besoin de résultats de recherche d'affichage dans un navigateur:

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

Je besoin d'une sortie qui ressemble à ceci:

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 partie importante est que chaque type d'élément obtient seulement un enregistrement / ligne dans le retour à l'écran. J'accompli dans le passé en retournant plusieurs lignes d'un même article et en utilisant un langage de script pour limiter la sortie. Cependant, ce qui rend l'interface trop complexe et loufoque. Donc, j'espère que je peux obtenir la base de données de cracher uniquement autant de dossiers qu'il ya de lignes à afficher.

Cet exemple peut être un peu extrême à cause de la 2 Assemble nécessaire pour obtenir au conteneur de l'élément (à travers la table de vente).

Je serais heureux pour juste une exemple de requête qui affiche ceci:

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

Je ne peux retourner un seul résultat dans une sous-requête, donc je ne suis pas sûr de savoir comment faire.

Était-ce utile?

La solution

En supposant que vous utilisez MySQL (des quatre questions que vous avez, un seul est étiqueté comme MySQL), fonction GROUP_CONCAT est ce que vous êtes après:

  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

Si vous voulez que les éléments qui pourraient ne pas avoir des liens avec les ventes et / ou CONTENEURS tables -. Ajouter « GAUCHE » devant la « JOIN »

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top