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

La instrucción anterior devuelve 3 filas. Pero la siguiente declaración solo devuelve 2 filas.Tabla MySQL -> ¿Puedes devolver la misma fila varias veces, en la misma consulta?

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

Y entiendo por qué como, pero hay una manera de forzar item_id 1 a devolver el doble ???

ejemplo de lo que quiero ser devuelto:

id -> 1 chips € 2,50
id -> 1 chips € 2,50
id -> 2 Coca-Cola € 1.60
---- ----------------
total € 6,60

Respuesta

5

Usted puede unirse en otra mesa, por ejemplo

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

O simplemente duplicarlos en su aplicación.

No debería necesitar hacer lo que está pidiendo.

+0

Sí, no es un rito como, duplicarlo con php es fácil enuff. Muchas gracias muchachos! –

+3

Fwiw, vagué en este hilo porque necesito producir varias copias de fila para un script de población. Diferente caso de uso que el anterior, pero a veces es necesario, sin acceso a la migración de nivel de aplicación. –

4

Usted tendría que hacer algo como esto:

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

Necesita una forma de generar un conjunto de filas ficticio para hacerlo, y MySQL lo carece.

Usted puede hacer lo siguiente:

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

truco muy útil para abordar tales situaciones +1 –

0

Use sindicatos:

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

¿por qué desea consultar db dos veces por lo mismo. Solo haga una consulta una vez y realice la modificación (agregue filas o muestre la misma fila dos veces) usando el lenguaje de programación que está utilizando.

Algo así como

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

La primera respuesta se ve mal. Se debe dejar combinación externa con order_items como primera tabla ...

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

Usted acaba de hacer una unión entre sus alias, por ejemplo,

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

Imprimirá datos como los siguientes.

1 abc 
1 abc 
1 abc 
1 abc 
1 abc 

Espero que lo entiendas.

Cuestiones relacionadas