我尝试为用户创建“高级”搜索字段。 (用户有5-8个字段来缩短搜索列表..)
我认为我必须根据发布的字段不为空来构建查询。
这是我原来的查询,但有了这个,我从表中得到了所有的行..
$query = "select * from MYTABLE where FIELD1 LIKE '%$sample1%' OR FIELD2 LIKE '%$sample2%' OR FIELD3 LIKE '%$sample3%' OR FIELD4 LIKE '%$sample4%' order by name";
所以我认为我必须在查询中使用IF语句,但我不知道如何,我一直有错误。还有一件事:如果用户填写“sample4”,那么他必须填写“sample1”。我怎么检查这个?
感谢您的帮助。
答案 0 :(得分:2)
您也可以使用数组来执行此操作,它将以这种方式更有条理。对于每个where条件,将它们存储在一个数组项中,最后在生成SQL时将它们连接起来。
<?
$fields = array('field1', 'field2', 'field3');
// Changed this to 0, so it won't return all rows
// but also the default array element prevent the statement to fail when
// no search is being specified at all
$wheres = array(0);
foreach ($fields as $fieldname) {
// Get user input
$search = $_GET[$fieldname];
// add condition to wheres if not empty
if (!empty($search)) {
$wheres[] = $fieldname . ' LIKE "%' . mysql_real_escape_string($search) . '%"';
}
}
// Join the wheres conditions using OR, (or AND)
$query = 'select * from MYTABLE where' . join(' OR ', $wheres);
?>
答案 1 :(得分:1)
您应该考虑实施“全文搜索”引擎。
MySQL具有“FULLTEXT”搜索功能 - 您可以开始了解它here: 另见本文:Developing A Site Search Engine With PHP And MySQL
答案 2 :(得分:0)
答案 3 :(得分:0)
也许您会想要一个以php为中心的全文搜索解决方案 - 然后查看Zend_Search_Lucene
这是Apache Lucene的PHP端口
Zend_Search_Lucene
的演示文稿可在此处找到:
答案 4 :(得分:0)
您可以尝试使用“is not null”运算符,如下所示:
select *
from mytable
where
(field1 is not null and field1 like '%test%') or
(field2 is not null and field2 like '%test%') or
(field3 is not null and field3 like '%test%') or
(field4 is not null and field4 like '%test%')
order by name