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

Câu lệnh trên trả về 3 hàng. Nhưng câu lệnh dưới đây chỉ trả về 2 hàng.Bảng MySQL -> Bạn có thể trả về cùng một hàng nhiều lần, trong cùng một truy vấn không?

Và tôi hiểu tại sao như thế, nhưng có cách nào để buộc item_id 1 phải trả lại hai lần không ???

Ví dụ về những gì tôi muốn được trả lại:

id -> 1 Chips € 2.50
id -> 1 Chips € 2.50
id -> 2 Coke 1,60 €
---- ----------------
Tổng số 6,60 €

Trả lời

5

Bạn có thể tham gia vào bảng khác, ví dụ

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

Hoặc chỉ cần lặp lại chúng trong ứng dụng của bạn.

Bạn không thực sự cần phải làm những gì bạn đang yêu cầu.

+0

Vâng, không có nghi thức gì lạ, sao chép nó bằng php dễ dàng. Cảm ơn nhiều bạn! –

+3

Fwiw, tôi lang thang theo chủ đề này vì tôi cần tạo nhiều bản sao hàng cho tập lệnh dân số. Trường hợp sử dụng khác so với ở trên, nhưng đôi khi cần thiết, không có quyền truy cập vào quá trình di chuyển tầng ứng dụng. –

4

Bạn sẽ phải làm một cái gì đó như thế này:

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

Bạn cần một cách để tạo một hàng rào giả để thực hiện việc này và MySQL thiếu nó.

Bạn có thể làm như sau:

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

mẹo rất hữu ích để giải quyết các tình huống như vậy +1 –

0

Sử dụng các công đoàn:

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

tại sao bạn muốn truy vấn db hai lần cho cùng một điều. Chỉ cần truy vấn một lần và thực hiện sửa đổi (thêm hàng hoặc hiển thị cùng một hàng hai lần) bằng ngôn ngữ lập trình bạn đang sử dụng.

Something như

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

Câu trả lời đầu tiên trông sai. Nó nên được bên ngoài tham gia với order_items như bảng đầu tiên ...

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

Bạn chỉ cần tham gia vào các bí danh của nó, ví dụ:

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

Nó sẽ in dữ liệu như sau.

1 abc 
1 abc 
1 abc 
1 abc 
1 abc 

Hy vọng, bạn sẽ hiểu.

Các vấn đề liên quan