2016-08-04 28 views
1

i einen Tisch Essenverbinden mehrere Beziehung Tabellen

food_id  food_name 

    1   chappathi 

und eine andere Tabelle Kategorie

category_id category_name 

    1    non-veg 
    2    nutrition 

und eine Beziehung Tabelle food_category

food_id category_id 

    1   1 
    1   2 

wo die food_id die foriegn ist Schlüssel haben food_id in der Nahrungsmitteltabelle, category_id ist der foriegn_key von category_id in der Kategorietabelle, t hier wird Fall keine Kategorien für ein Lebensmittel i

$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" 

versucht haben, es mir mehr als ein Lebensmittel gibt, was ich will, ist

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

Wie wird Ihr Ergebnis erwartet? – SIDU

+0

Wie ich sehen kann, ist Ihre Abfrage korrekt und es gibt Ihnen mehr als einen Datensatz. Da zwei Kategorien in der Tabelle "food_category" zugeordnet sind. –

+0

Ich möchte nur das Nahrungsmittel mit der ID 1, wenn es irgendwelche Kategorien in der Ergebnistabelle gibt, die ich als Array oder etwas anderes zum Nahrungsmittel 1 holen möchte, damit ich es als Chappathi mit Nährstoff- und Nicht-Gemüse-Kategorie anzeigen kann @SIDU –

Antwort

1

Try this:

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 

Hoffe, es wird Ihnen helfen.

+0

Danke @ d.coder –

+0

Vielen Dank für die Beantwortung @all –

0

Was Sie brauchen, ist 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

zu behandeln 'GROUP BY 1,2' ist sehr spezifisch für den aktuellen Inhalt der Tabelle. Sie sollten immer nach einem Spaltennamen gruppieren. – fpietka

+0

Sie haben einen Fehler in Ihrer SQL-Syntax. Überprüfen Sie das Handbuch, das zu Ihrer MySQL-Server-Version für die richtige Syntax in der Nähe von 'group_concat (c.category_name) AS Katze FROM essen AS f LEFT JOIN food_categ' in Zeile 1 @ SIDU –

+0

@Ranjith Ich testete mit mir, kein Fehler, irgendwelche Spaltennamen Tippfehler mit Ihrer realen Situation? – SIDU

0

Die Abfrage sollte wie folgt geschrieben werden, um den Nahrungsmittelnamen und seine Kategorienliste zu holen.

Bitte überprüfen Sie es.