2013-05-10 67 views
0

我有2個表格,一個是菜餚,另一個是配料。第一個網站將顯示所有菜餚,但是當用戶點擊洋蔥複選框時,查詢將顯示包含洋蔥的項目。如果用戶點擊土豆複選框,則查詢將顯示包含洋蔥和土豆等的項目。它會根據用戶輸入過濾結果。如果有人能提供幫助,這將是非常棒的。如何從一個sql列中獲取多個值

SELECT * 
FROM (`Ingredients`) 
WHERE `category` IN ('1', '8') 
AND `ingredients_name` = 'onion' 
AND `ingredients_name` = 'potato' 
AND `ingredients_name` = 'cream '; 

感謝

+7

你的問題不是很清楚;並且該查詢不起作用。你究竟想要做什麼?你能否在你的問題中增加一些例子? – andrewsi 2013-05-10 14:22:29

+0

告訴我們你想要什麼查詢的輸出包含。我不知道一列中的多個值是什麼意思。你的意思是像輸出一列中的數據一樣輸出三個不同的字段?> – Leeish 2013-05-10 14:23:23

+1

如果嘗試連接一列中的多行,請檢查mysql doc中的GROUP_CONCAT。 – SmasherHell 2013-05-10 14:24:11

回答

1

如果你想選擇多個值你能不能用這個:

SELECT * 
FROM (`Ingredients`) 
WHERE `category` = '1' OR `category` = '8' 
AND `ingredients_name` = 'onion' 
AND `ingredients_name` = 'potato' 
AND `ingredients_name` = 'cream '; 
+0

你不能?它應該返回相同的東西(它有點慢)... – 2013-05-10 14:32:09

+1

這將無法正常工作。您正在檢查'ingredients_name',但它只會匹配,如果它有三個不同的值。你可能也想把你的OR語句放在方括號中,否則你會對運算符優先級感到好玩。 – andrewsi 2013-05-10 14:32:54

+0

@andrewsi:的確,我甚至沒有看到這個。 – 2013-05-10 14:33:49

0

我想你應該添加哪些包含菜 例如,所有的成分信息二進制字符串列,1洋蔥,10馬鈴薯,100奶油,1000⋯⋯

那麼,如果你想找到所有的菜含有洋蔥,馬鈴薯,奶油

使用此SQL

SELECT * FROM菜餚,其中meta_info像洋蔥,土豆 '111%',奶油 使用 SELECT * FROM菜餚,其中meta_info像洋蔥和奶油 使用 '1_1%' 選擇*從菜餚,其中meta_info像「__1%」奶油

完美地解決這個問題,想想Lucene的或獅身人面像

0

什麼是菜和原料之間的關係(很多:1,1:1等)?如果是多對多的是這樣的:

SELECT * 
    FROM Dish d 
    JOIN DishIngredients di on di.dish_id = i.dish_id 
    JOIN Ingredient i on i.ingredient_id = di.ingredient_id 
    WHERE d.`category` IN ('1', '8') 
    AND i.`ingredients_name` = 'onion' 
    AND i.`ingredients_name` = 'potato' 
    AND i.`ingredients_name` = 'cream '; 

應提供的信息。如果它是FK的設定數量,則可以加入每個FK以獲得完整約束。

0

我認爲你需要每個成分的單獨的連接,動態地構建查詢。

例子:

SELECT a.* 
FROM `Dishes` a 
JOIN `Ingredients` i1 ON i1.dish_id = a.id AND i1.ingredients_name = 'onion' 
JOIN `Ingredients` i2 ON i2.dish_id = a.id AND i2.ingredients_name = 'potato' 
JOIN `Ingredients` i3 ON i3.dish_id = a.id AND i3.ingredients_name = 'cream' 
WHERE a.category IN ('1', '8'); 

我在這裏做幾個假設,但你應該明白我的意思。另外,我會推薦使用成分ID,而不是字符串(或者至少在ingredients_name上加上索引)。

相關問題