Hoi,
Op dit moment probeer ik een query te verzinnen die moet doen wat ik wil. De bedoeling is dat er een bepaald item geselecteerd kan worden, dat de query dan gaat kijken naar elk rij die dat item heeft maar dan niet zal weergeven. (klinkt een beetje raar ok ik weet ik)
Even een kleine indruk van de tabellen die ik heb
Tabel menu:
menu_id
menu_price
menu_description
restaurant_id
type_id
Tabel ingredients:
ingredients_id
ingredients_name
Tabel menu_ingredient:
menu_id
ingredients_id
In de tabel menu komen de menu's te staan. In de ingredienten staan de beschikbaren ingredienten. Om nou de ingredienten bij de menu's te krijgen heb ik een losse tabel gemaakt die alle gegevens koppelt (voor de ingredienten aan het menu dan)
Query die weergeeft van de menu's met een bepaald ingredient lukt wel:
SELECT menu.menu_id, menu.menu_name, menu.menu_price, menu.menu_description
FROM menu, menu_ingredient
WHERE menu_ingredient.ingredients_id = 5 AND menu.menu_id = menu_ingredient.menu_id GROUP BY menu.menu_id
Dus dat is het probleem niet echt. Maar het probleem is meer op het moment dat ik een menu zoek ZONDER een bepaald ingredient.
Als ik dan doe:
SELECT menu.menu_id, menu.menu_name, menu.menu_price, menu.menu_description
FROM menu, menu_ingredient
WHERE menu_ingredient.ingredients_id <> 5 AND menu.menu_id = menu_ingredient.menu_id GROUP BY menu.menu_id
Krijg ik dezelfde resultaten. Reden: Omdat er ook een rij bestaat van die bepaalde menu's die dus niet nummer 5 hebben. dus wat hij eigenlijk zou moeten doen, is kijken welke menu_id het ingredient_id 5 heeft die menu_id onthouden en dan dus die ook wegschrijven.
Nu had ik wel iets geprobeert maar ik denk dat het fouten geeft omdat er meerdere resultaten uit de sub query komen:
SELECT menu.menu_id, menu.menu_name, menu.menu_price, menu.menu_description
FROM menu
INNER JOIN menu_ingredient
ON menu.menu_id=menu_ingredient.menu_id
AND menu_ingredient.ingredients_id <> '5'
AND menu_ingredient.menu_id <> (SELECT menu_ingredient.menu_id FROM menu_ingredient WHERE menu_ingredient.ingredients_id = ‘5’)
(owja de eerste query kan ik eventueel ook nog als een JOIN doen, maar is nog niet echt bepaald nodig maar heb ik wel in een JOIN geschreven alsnog)...
Heeft iemand enige ideeen hoe ik dit kan oplossen? Mochten jullie nog meer info nodig hebben hoor ik dat vanzelf wel. Ik ben al de hele ochtend bezig geweest ongeveer, maar wil nog niet echt lukken. Google/GOT ook al afgezocht, maar nog niet echt bepaald mijn antwoord kunnen vinden.
Op dit moment probeer ik een query te verzinnen die moet doen wat ik wil. De bedoeling is dat er een bepaald item geselecteerd kan worden, dat de query dan gaat kijken naar elk rij die dat item heeft maar dan niet zal weergeven. (klinkt een beetje raar ok ik weet ik)
Even een kleine indruk van de tabellen die ik heb
Tabel menu:
menu_id
menu_price
menu_description
restaurant_id
type_id
Tabel ingredients:
ingredients_id
ingredients_name
Tabel menu_ingredient:
menu_id
ingredients_id
In de tabel menu komen de menu's te staan. In de ingredienten staan de beschikbaren ingredienten. Om nou de ingredienten bij de menu's te krijgen heb ik een losse tabel gemaakt die alle gegevens koppelt (voor de ingredienten aan het menu dan)
Query die weergeeft van de menu's met een bepaald ingredient lukt wel:
SELECT menu.menu_id, menu.menu_name, menu.menu_price, menu.menu_description
FROM menu, menu_ingredient
WHERE menu_ingredient.ingredients_id = 5 AND menu.menu_id = menu_ingredient.menu_id GROUP BY menu.menu_id
Dus dat is het probleem niet echt. Maar het probleem is meer op het moment dat ik een menu zoek ZONDER een bepaald ingredient.
Als ik dan doe:
SELECT menu.menu_id, menu.menu_name, menu.menu_price, menu.menu_description
FROM menu, menu_ingredient
WHERE menu_ingredient.ingredients_id <> 5 AND menu.menu_id = menu_ingredient.menu_id GROUP BY menu.menu_id
Krijg ik dezelfde resultaten. Reden: Omdat er ook een rij bestaat van die bepaalde menu's die dus niet nummer 5 hebben. dus wat hij eigenlijk zou moeten doen, is kijken welke menu_id het ingredient_id 5 heeft die menu_id onthouden en dan dus die ook wegschrijven.
Nu had ik wel iets geprobeert maar ik denk dat het fouten geeft omdat er meerdere resultaten uit de sub query komen:
SELECT menu.menu_id, menu.menu_name, menu.menu_price, menu.menu_description
FROM menu
INNER JOIN menu_ingredient
ON menu.menu_id=menu_ingredient.menu_id
AND menu_ingredient.ingredients_id <> '5'
AND menu_ingredient.menu_id <> (SELECT menu_ingredient.menu_id FROM menu_ingredient WHERE menu_ingredient.ingredients_id = ‘5’)
(owja de eerste query kan ik eventueel ook nog als een JOIN doen, maar is nog niet echt bepaald nodig maar heb ik wel in een JOIN geschreven alsnog)...
Heeft iemand enige ideeen hoe ik dit kan oplossen? Mochten jullie nog meer info nodig hebben hoor ik dat vanzelf wel. Ik ben al de hele ochtend bezig geweest ongeveer, maar wil nog niet echt lukken. Google/GOT ook al afgezocht, maar nog niet echt bepaald mijn antwoord kunnen vinden.