2013-03-27 34 views
6

Từ việc tham gia các bảng bên dưới trên entry.id, tôi muốn trích xuất các hàng từ bảng food_brands có loại_id cao nhất - vì vậy tôi sẽ nhận được 3 hàng trên cùng, với type_id 11940MySQL tham gia vào giá trị tối đa

food_brands

 id  brand  type_id 
     15375 cesar  11940 
     15374 brunos  11940 
     15373 butchers 11940 
     15372 bakers  11939 
     15371 asda  11939 
     15370 aldi  11939 

loại

 id  type  quantity  food_id 
     11940 comm  53453   10497 
     11939 comm  999   10496 

thực phẩm

 id  frequency entry_id 
     10497 twice  12230 
     10496 twice  12230 
     10495 once  12230 

mục

  id  number 
     12230 26 

nỗ lực của tôi tại truy vấn không lọc ra các hồ sơ type.id thấp hơn - vì vậy từ các hồ sơ bảng dưới đây trong food_brands, tôi nhận được những người có type_id 11940 và 11939. Grateful cho bất kỳ trợ giúp nào sửa lỗi này!

SELECT fb.* 
         FROM food_brands fb 
         INNER JOIN types t ON fb.type_id = t.id 
         INNER JOIN 
         (
          SELECT MAX(id) AS MaxID 
          FROM types 
          GROUP BY id 
         ) t2 ON t.food_id = t2.food_id AND t.id = t2.MaxID 
         INNER JOIN foods f ON t.food_id = f.id 
         INNER JOIN entries e ON f.entry_id = e.id 
         WHERE entries.id = 12230 
+1

'feed_id' là gì ?? – didierc

+0

didierc - cũng được phát hiện! đã cập nhật – bsod99

Trả lời

2

Nếu bạn chỉ muốn trả lại hàng từ food_brands với max loại id, bạn sẽ có thể sử dụng:

SELECT fb.* 
FROM food_brands fb 
INNER JOIN 
(
    select max(id) id 
    from types 
) t 
    on fb.type_id = t.id 

Xem SQL Fiddle with Demo

4

Một subquery đơn giản nên làm điều đó chỉ khỏe;

SELECT * FROM food_brands WHERE type_id= 
    (SELECT MAX(t.id) tid FROM types t 
    JOIN foods f ON f.id=t.food_id AND f.entry_id=12230) 

An SQLfiddle to test with.

0

Tôi không biết tại sao bạn đang làm tất cả các kết nối bên trong sau khi tham gia truy vấn con t2, vì bạn chỉ truy xuất các cột của fb, nhưng tôi cho rằng bạn không hiển thị toàn bộ truy vấn, muốn có được một cố định.

Vấn đề là thực sự trong subquery t2: ở đó, vì một lý do không kể xiết, bạn chọn để làm một GROUP BY id làm thay đổi MAX chức năng ngữ nghĩa để tạo ra một giá trị tối đa cho mỗi id, và kể từ khi bạn đang yêu cầu tối đa trên đó rất cột, MAXGROUP BY ca cel với nhau. Chỉ cần loại bỏ mệnh đề GROUP BY sửa lỗi truy vấn.

Nếu vì một số lý do chưa được giải thích, bạn không thể xóa khoản đó, có thể thay thế MAX(id) bằng id và thêm ORDER BY id DESC LIMIT 1 sẽ làm.

Ngoài ra, truy vấn phụ của bạn có lẽ cũng nên chọn food_id vì nó được sử dụng trong mệnh đề INNER JOIN tiếp theo.

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