2013-03-27 5 views
6

От присоединения к таблицам ниже на entry.id я хочу извлечь строки из таблицы food_brands с самым высоким типом type_id - поэтому я должен получить верхние 3 строки ниже, с типом_ид 11940MySQL присоединяется к максимальному значению

food_brands

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

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

продукты

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

записи

  id  number 
     12230 26 

Моя попытка запроса не отфильтровывая нижние type.id записи - так из записей таблицы ниже в food_brands, я получаю те с TYPE_ID 11940 и 11939. Grateful для любая помощь исправить это!

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' ?? – didierc

+0

сделалierc - хорошо пятнистый! обновленный – bsod99

ответ

2

Если вы просто хотите, чтобы вернуть строки из food_brands с типом идентификатора max, вы должны быть в состоянии использовать:

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

См SQL Fiddle with Demo

4

Простой подзапрос должен сделать это просто штраф;

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

Я не знаю, почему вы делаете все эти внутренние соединения после одного из подкадров t2, так как вы только извлекаете столбцы fb, но я полагаю, что вы не показываете весь запрос, и вы просто хочу, чтобы это было исправлено.

Проблема на самом деле в подзапросе t2: там, по какой-то невыразимой причине вы решили сделать GROUP BY id который изменяет MAX функции семантики для создания максимального значения за id, и так как вы просите максимум на что очень колонка, MAX и GROUP BY ca cel вне друг друга. Просто удаление предложения GROUP BY исправляет запрос.

Если по какой-либо неисчислимой причине вы не можете удалить это предложение, возможно, заменив MAX(id) на id и добавив ORDER BY id DESC LIMIT 1.

Кроме того, ваш подзапрос должен, вероятно, также выбрать food_id, поскольку он используется в следующем INNER JOIN.