foreach选择查询如何缩短

时间:2012-04-22 22:02:16

标签: php mysql function search

你好我有一个集成在搜索功能中的选择查询:我有这个代码:

foreach ($keywords as $key=>$keyword){
$where .= "`column_a` LIKE '%$keyword%'";
$where .= " OR ";
$where .= "`column_b` LIKE '%$keyword%'";
$where .= " OR ";   
$where .= "`column_c` LIKE '%$keyword%'";
$where .= " OR ";
$where .= "`column_d` LIKE '%$keyword%'";
$where .= " OR ";
$where .= "`column_e` LIKE '%$keyword%'";

    if ($key != ($total_keywords - 1)){ 
        $where .= " AND ";
    }
}

$results = "SELECT `column_a`, `column_b`, `column_c`, `column_d`, `column_e` FROM `table` WHERE $where";

好的,如果只搜索一个关键字,查询看起来像:

SELECT `column_a`, `column_b`, `column_c`, `column_d`, `column_e` FROM `table` WHERE `column_a` LIKE '%one%' OR `column_b` LIKE '%one%' OR `column_c` LIKE '%one%' OR `column_d` LIKE '%one%' OR `column_e` LIKE '%one%'

什么是很长的。现在如果有两个搜索器,它将看起来像:

SELECT `column_a`, `column_b`, `column_c`, column_d`, `column_e` FROM `table` WHERE `column_a` LIKE '%one%' OR `column_b` LIKE '%one%' OR `column_c` LIKE '%one%' OR `column_d` LIKE '%one%' OR `column_e` LIKE '%one%' AND `column_a` LIKE '%two%' OR `column_b` LIKE '%two%' OR `column_c` LIKE '%two%' OR `column_d` LIKE '%two%' OR `column_e` `LIKE` '%two%'

什么绝对太长了。所以我的问题是,还有另一种方法可以获得相同的结果吗?我已经知道有MATCH()AGAINST()但是这个原因不明。

所以,如果有人可以帮助我,我真的很感激。非常感谢。

1 个答案:

答案 0 :(得分:0)

查看this answer

它会缩短您的查询,最多5个条件总是足够的。

更重要的是,您可以将所有列加入一个并在其中搜索:

SELECT `column_a`, `column_b`, `column_c`, column_d`, `column_e` FROM `table` 
WHERE CONCAT(column_a, column_b, column_c, column_d, column_e) REGEXP 'one|two'

但是全文索引(如果有的话)可能在此查询中不起作用。检查性能是否合适。