php - MYSQL PHP 一次检查多个列上的类似语句

标签 php mysql sql

我有一个关于搜索栏的查询。我知道我可以使用 OR 来拆分语句以检查不同的列:

$query = mysql_query('SELECT * FROM PRODUCTS WHERE cats LIKE "%'.$s.'%" OR sub_cats LIKE "%'.$s.'%"');

但是,如果我想检查超过 2 或 3 列,有没有办法做这样的事情来加快速度:

$query_string = explode('&&=',$_GET['q']);
    $db_str = 'SELECT * FROM products WHERE name, cats, sub_cats, desc, brand ';
    for($x = 0; $x < count($query_string); $x++){
        $enc = mysql_real_escape_string($query_string[$x]);
        if($x == (count($query_string) -1)){
            $db_str .= 'LIKE "%'.$enc.'%"';
        }else{
            $db_str .= 'LIKE "%'.$enc.'%" ';
        }
    }
    $query = mysql_query($db_str);

我通常使用 POST 作为搜索栏,但我喜欢尝试一下 GET,它对我来说看起来更用户友好。

最佳答案

我不知道这是否会加快速度(您必须测试您的数据)。但是,以下是仅进行一次比较的替代方案:

WHERE concat_ws('|', name, cats, sub_cats, desc, brand) LIKE '%$enc%'

由于您的 like 开头有通配符,因此查询不使用常规索引。所以这个版本应该不会减慢速度太多(如果有的话)。

不过,性能问题的答案可能是全文索引。

关于php - MYSQL PHP 一次检查多个列上的类似语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20507307/

相关文章:

MySQL 加载数据文件 (CSV) : replace/remove vertical tabs

java - 对于 (字符串 s : letters) {JAVA} How is this in php? 对于 ($string_l1 : $array){PHP}?

php - 如何使用php显示mysql数据库中的图像?

mysql - MySQL 4.1 的 SET 与 LOAD DATA INFILE 的等价物?

sql - 在 PL/SQL 中合并两个表中的两列

java - 从 jtextfield java GUI 将值插入到 mysql 表中

php - 锁定其他脚本查询的表,直到我的 php 脚本结束

PHP - 存储为 BLOB 的图像显示为断开的链接

具有编辑/删除模式的 PHP while 循环仅返回第一行中的 ID

MYSQL-无法计算字段之间的时间差并且无法使用 where 子句