我尝试为用户创建一个“高级”搜索栏。(用户有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“。我怎样才能检查这个?
谢谢你的帮助。
发布于 2009-12-15 18:22:47
你也可以使用数组来做这件事,这样会更有条理。对于每个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);
?>
发布于 2009-12-15 18:30:53
你应该考虑实现一个“全文搜索”引擎。
MySQL有一个“全文”搜索功能--你可以开始了解它here:另请参阅这篇文章:Developing A Site Search Engine With PHP And MySQL
发布于 2009-12-15 18:22:23
也许创建一个只包含用户填写的筛选器约束的查询比包含所有筛选器约束更好。
如果您希望遵循解决方案,则可以使用SQL结构
CASE WHEN
请参阅MS SQL的this和MySQL的this
https://stackoverflow.com/questions/1906411
复制相似问题