我有一張表,其中包含一些成分。例如:在sql表中搜索多個值,範圍爲
id | title | ingredients
1 | ex1 | ketchup, chicken, salt, honey, mountain dew
2 | ex2 | beef, pepper, chili, honey, salt
並且當像的成分用戶searchs:
ketchup, salt, honey
我生成SQL查詢:
select * from recipes where(
(ingredients LIKE '%ketchup%')
AND (ingredients LIKE '%salt%')
AND (ingredients LIKE '%honey%')
並返回包含這些特定的成分的所有的食譜,它運作灰色。
現在。我添加了一個範圍滑塊,用於選擇應該匹配的搜索結果中返回的任何內容的數量。比方說,我選擇了2個成分應該至少匹配,我想做一個PHP函數,輸出一個SQL字符串,將輸入的所有成分配對,但我根本沒有它的心態。 實施例:
(ingredients LIKE '%ketchup%') AND (ingredients LIKE '%salt%')
OR
(ingredients LIKE '%ketchup%') AND (ingredients LIKE '%honey%')
OR
So on. So ketchup & salt pair, ketchup & honey pair, salt & honey pair.
當然可變所以世界上沒有限制的成分輸入。我已經嘗試了幾個小時,但沒有成功。希望我已經解釋清楚我的自我&會有人能夠幫助或教我的東西:-)
我的PHP函數,它當前字符串看起來是這樣的:
$c_soeg = "ketchup, whatever, whatever. etc";
$c_ing_arr = explode(",", $c_soeg);
$c_count_arr = count($c_ing_arr);
$i = 0;
$c_sql = "SELECT * FROM recipes WHERE (";
while($i < $c_count_arr){
$c_sql .= "(ingredients LIKE '%".trim($c_ing_arr[$i])."%')";
if($i != $c_count_arr-1){
$c_sql .= " AND ";
}
$i++;
}
$c_sql .= ")";
而且包含變量該範圍的值被命名爲
$c_range;
當逗號分隔值出現時,停止在第3行閱讀。不要這樣做。閱讀有關規範化。 – fancyPants
數據庫標準化,你會說嗎? – mituw16
這只是一個例子,我知道正常化但不解決問題 – Imbue