webForumDet fria alternativet

Söka i flera tabeller med olika många värden?

Databaser & SQL

7 svar · 530 visningar · startad av Melea

Medlem sedan juli 20033 147 inlägg
Frågan#1

Hej!

Jag har två tabeller jag vill söka i. tbl_recipes och tbl_recipes_ingredient.
tbl_recipes har två kolumner, recipe_name och recipe_info.
tbl_recipe_ingredient har en kolumn jag vill söka i, ingredient_name, men det kan finnas mer än 1 rad, beroende på hur många ingredienser receptet har.

Finns det något smidigt sätt att söka i tbl_recipe_ingredient? Så här ser det ut nu:

select 
	r.recipe_id, 
	r.recipe_name, 
	r.recipe_info
from 
	tbl_recipe r
left join 
	tbl_recipe_ingredient i on i.recipe_id = r.recipe_id
where 
	r.recipe_info like '%' :search_query '%' or 
	r.recipe_name like '%' :search_query '%'

Men jag får inte ihop sökningen till tbl_recipe_ingredient.

Tacksam för all hjälp man kan få! :bire

Medlem sedan dec. 20025 483 inlägg
#2

...or
i.ingredient_name like '%' :search_query '%'

Medlem sedan juli 20033 147 inlägg
#3

Okej, det där var löjligt, måste ha skrivit fel någonstans, tack! :)
En följdfråga: Jag har recepten uppdelade i kategorier, som ligger i recipe_category, hur gör jag om jag endast vill söka i kategorier jag väljer via checkboxar?

<input type="checkbox" name="category_id[]" value="1" /> Kött
<input type="checkbox" name="category_id[]" value="2" /> Fisk
<input type="checkbox" name="category_id[]" value="3" /> Veg

Testade med

select 
	r.recipe_id, 
	r.recipe_name, 
	r.recipe_info
from 
	tbl_recipe r
left join 
	tbl_recipe_ingredient i on i.recipe_id = r.recipe_id
left join 
	tbl_recipe_category c on c.recipe_id = r.recipe_id
where 
	r.recipe_info like '%' :search_query '%' or 
	r.recipe_name like '%' :search_query '%' or
	i.ingredient_name like '%' :search_query '%' and
	c.category_id = :category_id

Men det vill inte.

Medlem sedan dec. 20025 483 inlägg
#4

I.o.m. att du kan få flera värden från checkboxarna skulle du kunna skapa en kommaseparerad lista och stoppa i :category_ids. Sedan:

select 
	r.recipe_id, 
	r.recipe_name, 
	r.recipe_info
from 
	tbl_recipe r
left join 
	tbl_recipe_ingredient i on i.recipe_id = r.recipe_id
left join 
	tbl_recipe_category c on c.recipe_id = r.recipe_id
where 
	(r.recipe_info like '%' :search_query '%' or 
	r.recipe_name like '%' :search_query '%' or
	i.ingredient_name like '%' :search_query '%') and
	c.category_id in (:category_ids)
Medlem sedan juli 20033 147 inlägg
#5

Testade men får det inte att funka, den verkar ta vilket resultat som helst. Såhär gjorde jag listan.

foreach ($this->category as $value)
	$this->category_ids .= $value . ',';

$this->category_ids = substr($this->category_ids, 0, -1);

Den skapar en lista som kan se ut såhär: 1,6,8

Medlem sedan dec. 20025 483 inlägg
#6

Har du med parenteserna kring de OR:ade villkoren också?

Medlem sedan juli 20033 147 inlägg
#7

Nix, nu funkar det! Tusen tack! :bire

Medlem sedan dec. 20025 483 inlägg
#8

:bire

269 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
132 ms — deklarationer (db)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)
134 ms — ändringar (db)