2009-07-10 5 views
8
SELECT * FROM menu WHERE item_id = 1 OR item_id = 2 OR item_id = 3; 

L'instruction ci-dessus renvoie 3 lignes. Mais la déclaration ci-dessous ne renvoie que 2 lignes.Table MySQL -> Pouvez-vous retourner la même ligne plusieurs fois, dans la même requête?

SELECT * FROM menu WHERE item_id = 1 OR item_id = 1 OR item_id = 2; 

Et je comprends pourquoi, mais y a-t-il un moyen de forcer item_id 1 à être retourné deux fois ???

Exemple de ce que je veux retourner:

id -> 1 Chips € 2,50
id -> 1 Chips € 2,50
id -> 2 Coke € 1,60
---- ----------------
total € 6,60

Répondre

5

Vous pouvez joindre à une autre table, par exemple

SELECT * FROM menu 
INNER JOIN order_items ON menu.item_id = order_items.item_id 
WHERE order_id = 123; 

Ou tout simplement les dupliquer dans votre application.

Vous ne devriez pas vraiment avoir besoin de faire ce que vous demandez.

+0

Ouais, pas de rite comme, dupliquer avec php est facile enuff. Merci beaucoup les gars! –

+3

Fwiw, j'ai erré sur ce fil parce que je dois produire plusieurs copies de ligne pour un script de population. Diff-cas d'utilisation que ci-dessus, mais il est parfois nécessaire, sans accès à la migration de niveau applicatif. –

4

Vous auriez à faire quelque chose comme ceci:

SELECT * FROM menu WHERE item_id = 1 
UNION ALL 
SELECT * FROM menu WHERE item_id = 1 
UNION ALL 
SELECT * FROM menu WHERE item_id = 2 
0

Vous avez besoin d'un moyen de générer un ensemble de lignes factice pour ce faire, et MySQL ne le possède pas.

Vous pouvez effectuer les opérations suivantes:

SELECT * 
FROM (
     SELECT 1 AS x 
     UNION ALL 
     SELECT 1 AS x 
     UNION ALL 
     SELECT 2 AS x 
     ) dummy 
JOIN menu 
ON  menu.id = dummy.x 
+0

astuce très pratique pour faire face à de telles situations +1 –

0

Utilisez les syndicats:

SELECT * FROM menu WHERE item_id = 1 
    UNION ALL 
SELECT * FROM menu WHERE item_id = 1 
    UNION ALL 
SELECT * FROM menu WHERE item_id = 2 
0

pourquoi voulez-vous interroger db deux fois pour même chose. Juste une requête une fois et faites la modification (ajouter des lignes ou afficher deux fois la même ligne) en utilisant le langage de programmation que vous utilisez.

Quelque chose comme

id -> 1 Chips €2.50 X 2 
id -> 2 Coke €1.60 
-------------------- 
Total €6.60 
0

La première réponse semble erroné. Il doit rester jointure externe avec ordre_items comme première table ...

SELECT * FROM order_items oi 
left outer JOIN menu m 
ON oi.item_id = m.item_id 
WHERE order_id = 123; 
1

Vous venez de faire une jointure entre ses alias, par exemple

select top 5 * from item a, item b where a.itemid =1 

Il va imprimer les données comme suit.

1 abc 
1 abc 
1 abc 
1 abc 
1 abc 

Espérons que vous comprendrez.

Questions connexes