我尝试根据用户输入创建动态搜索查询。
现在我完成了我的研究,并且我发现了多种方法。但它们都不起作用,如果它们起作用,它们远非实用。
目前我正在创建这样的查询:
SELECT *
FROM assignments
WHERE (id = $id OR id = '')
AND (field1 = $field1 OR field1 = '')
此查询有效,但前提是您填写所有字段。
我从stackoverflow文章中得到了这个,我再也找不到了,说:
如果用户填写了输入字段,则会检查第一条规则 " id = $ input" 如果用户没有指定任何输入,它将检查" id ='' "当它 检查一下,它只会返回一切。因为它逃脱了空搜索规则。
但正如你可能已经知道的那样,它不起作用..
你怎么建议我接近这个?
答案 0 :(得分:10)
尝试获取所有的post vars并循环遍历它们以查看它们是否有效,然后构建查询
<?php
$id = $_POST[id];
$field1 = $_POST[field1];
$field2 = $_POST[field2];
$field3 = $_POST[field3];
$whereArr = array();
if($id != "") $whereArr[] = "id = {$id}";
if($field1 != "") $whereArr[] = "field1 = {$field1}";
if($field2 != "") $whereArr[] = "field2 = {$field2}";
if($field3 != "") $whereArr[] = "field3 = {$field3}";
$whereStr = implode(" AND ", $whereArr);
$query = "Select * from assignments WHERE {$whereStr}";
这样的事情应该能够处理你需要的东西
答案 1 :(得分:2)
你应该从像WHERE语句这样的字符串开始,然后循环遍历用户想要搜索的所有字段并将它们添加到数组中,然后使用PHP函数“implode”来粘合字段和AND语句一起作为“粘合剂”。
现在将胶合的字符串添加到startquery并瞧!
我举个例子,但是打电话给我!
答案 2 :(得分:0)
根据响应动态构建查询绝对是必须的。但另一个允许用户根据甚至部分响应查找结果的好功能是使用MySQL REGEXP查询。例如,如果他们想在Top Gun数据库中找到“特立独行”,则查询REGEXP ='mav'| 'rick'会返回结果。这使您的搜索更接近用户习惯的搜索引擎功能。