2016-08-04 4 views
1

я есть питание таблицыобъединить несколько таблиц отношению

food_id  food_name 

    1   chappathi 

и другую категорию таблицы

category_id category_name 

    1    non-veg 
    2    nutrition 

и отношение таблицы food_category

food_id category_id 

    1   1 
    1   2 

где food_id является foriegn ключ food_id в таблице продуктов, category_id является foriegn_key категории_id в таблице категорий, t здесь будет случай нет категории для питания я попытался

$sql=  "SELECT * FROM food f 
      LEFT JOIN food_category fc 
      ON f.food_id=fc.food_id 
      LEFT JOIN category c 
      ON fc.category_id=c.category_id" 

это дает мне больше, чем один продуктов питания, что я хочу

item name: chappathi 
categories: non-veg, nutrition 
------------------------------ 
second row of result set if there is any 
+1

Каков будет ваш результат? – SIDU

+0

Как я вижу, ваш запрос верен, и он даст вам несколько записей. Поскольку у него есть две категории, связанные с таблицей food_category. –

+0

Я хочу только элемент питания с идентификатором 1, если в таблице результатов есть какие-либо категории. Я хочу, чтобы вытащить его в пищевой элемент 1 в виде массива или что-то еще, поэтому я могу отображать его как chappathi с питательной и неэпидемической категорией @SIDU –

ответ

1

Попробуйте это:

SELECT f.food_name AS item_name, GROUP_CONCAT(c.category_name SEPARATOR ', ') AS categories 
FROM food f 
LEFT JOIN food_category fc ON f.food_id=fc.food_id 
LEFT JOIN category c ON fc.category_id=c.category_id 
GROUP BY f.id 

Надеется, что это поможет.

+0

Спасибо @ d.coder –

+0

Спасибо всем за ответ @all –

0

Что вам нужно не GROUP_CONCAT:

SELECT f.food_name, group_concat(c.category_name) AS Cat 
FROM food AS f 
LEFT JOIN food_category AS fc ON f.food_id = fc.food_id 
LEFT JOIN category AS c ON c.category_id = fc.category_id 
GROUP BY f.food_id 
+0

'GROUP BY 1,2' очень специфичен для текущего содержимого таблицы. Вы всегда должны группироваться по имени столбца. – fpietka

+0

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего MySQL-сервера, для правильного синтаксиса для использования рядом с 'group_concat (c.category_name) AS Cat FROM food AS f LEFT JOIN food_categ' по строке 1 @SIDU –

+0

@Ranjith Я проверил с моим, без ошибок, любые имена столбцов опечатываются с вашей реальной ситуацией? – SIDU

0

Запрос должен быть указан следующим образом, чтобы получить имя и список категорий продуктов.

SELECT f.food_name as ItemName, 
STUFF(
     (SELECT DISTINCT ',' + c.category_name 
      FROM food 
      LEFT JOIN food_category fc on fc.food_id= food.food_id 
      LEFT JOIN category c ON fc.category_id =c.category_id       
      FOR XML PATH ('')), 1, 1, '') AS Categories 
FROM food f      
group by f.food_id, f.food_name 

Пожалуйста, проверьте это.

Смежные вопросы