假设我有三张桌子: *食谱 - 包含食谱 *成分 - 项目清单 *餐 - 吃饭清单
我有一个表单,可以生成如下选项:
Choose what ingredients you have:
- apples
- bananas
- cherries
Choose the meal this is for:
- breakfast
- lunch
- dinner
我希望用户能够选择上述任何一种,或者不选择任何一种,即他们可以选择苹果或樱桃OR(香蕉和午餐)
当我查询MySQL时,我的查询大致是
select recipes.* from recipes
或
select recipes.* from recipes, ingredients
where recipes.id= ingredients.id and ingredients.list in ('apple');
或
select recipes.*
from recipes, ingredients, meal
where recipes.id= ingredients.id
and ingredients.list
and ingredients.id = meals.id
and ingredients.list ('apple')
and meals.list in ('lunch');
是否存在一种很好的说法(在PHP中),如果这个数组存在(即is_array(成分)添加到查询表(成分)和最后粘贴(“.ingredients.list in('apple') ))...
无需编写所有可能的组合或可能的输入(即用户从成分列表中选择,或从成分和膳食列表中选择,或从无列表中选择)?
答案 0 :(得分:0)
有几种方法可以解决这个问题。
如果您想知道数组中是否存在密钥,可以使用array_key_exists
答案 1 :(得分:0)
您可以为可能的表和块创建两个数组,然后进行收集所有内容的查询:
$wheres=array();
$tables=array();
if(isset($_POST['ingredients'])) {
$tables[]='ingredients';
$ingredients=array_map('mysqL_real_escape_string', $_POST['ingredients']);
$wheres[]='ingredients.list IN (\''. join(', ', $ingredients). '\')';
//add other wheres if you want
}
if(isset($_POST['meals'])) {
$tables[]='meal';
$meals=array_map('mysqL_real_escape_string', $_POST['meals']);
$wheres[]='meals.list IN (\''. join(', ', $ingredients). '\')';
//add other wheres if you want
}
if(!$tables) {
echo 'You have not chose anything!';
} else {
$query = 'SELECT * FROM '. join(',', $tables). ' WHERE '. join(' AND ', $wheres);
//do other stuff..
}
答案 2 :(得分:0)
我在这里看不到“所有可能的组合或可能的输入”,而只是所有可能的输入 我会检查所有可能的输入并将其添加到查询中(如果已填充)。