我对PHP和MySQL都很陌生,我正在尝试建立一个小型的歌手报价库。我希望用户能够通过键入部分引号本身,歌手的名字或歌手的乐队(如果有的话)来搜索引用。
现在,我非常注意这一部分:
$query = 'SELECT * FROM quotes WHERE (quote LIKE "%'.$search_string.'%" OR singerName LIKE "%'.$search_string.'%" OR bandName LIKE "%'.$search_string.'%")';
这有效,虽然它可以返回结果,其中search_string位于单词的中间:如果我输入“她”,它将返回包含“其他”或“在一起”的每个引用。如果我从查询中删除第二个%,它将不会返回其中search_string不是我想要它的第一个单词的引号。
无论如何,我还想做的是过滤结果的可能性。假设我希望用户只能通过单选按钮显示英语,德语或两者的引号。默认情况下,选中Both,因此上面的$ query仍然有效。但是,如果用户选择英语,则还应该说AND (language = 'EN')
。
目前,我尝试以这种方式添加查询:
if ($_POST['language']== "EN") {
$sql .= " AND (language = 'EN')";
}
它有效,但它可能是一个真正的麻烦,因为我还希望用户只使用过滤器搜索引号,而无需输入搜索查询:他们将能够在Band中查找歌手的英语引号,例如。所以,我也有这个:
if (strlen($search_string) < 1) {
$sql = "SELECT * FROM quotes";
}
但是,$sql .= " AND (language = 'EN')";
不再正确,因为“AND”应该是“WHERE”。所以我必须有另一个if子句来修改字符串,另一个用于我决定应用的每个过滤器。
我的问题是:我应该如何构建我的查询,假设有可选过滤器,并且还可以使用过滤器单独进行搜索?< / p>
谢谢!
答案 0 :(得分:2)
设置一个始终为真的条件,以便具有常量WHERE
子句。
$sql = "SELECT * FROM myTable WHERE 1 = 1 "
if (true) {
$sql .= " AND col1 LIKE '%val%' ";
}