MySQL - 选择与参数匹配的列

时间:2016-05-02 19:16:19

标签: php mysql regex

在我的名为products的表中,我有列parameters,其中的字符串是这样的:

1#2#3#4=10#5=20#6

这些数字是产品参数的ID。每个ID都由#分隔。一些参数带有=,这意味着该参数具有特定值(仅整数)。

因此ID为4的参数的值为10

我想选择与$_GET["parameters"]中保存的参数匹配的产品。保存参数的模式例如是2-6-5>10-4<5。因此上面的字符串示例不匹配,因为参数4的值为10且大于5

我知道如何仅使用参数ID从表中选择产品。像这样:

$parameters = explode("-", $_GET["parameters"]);
$search = "";

foreach ($parameters as $parameter) {
    if (preg_match("/^\d+$/", $parameter)) {
        $search .= "AND parameters LIKE '%#$parameter#%' ";
    }
}

$search = preg_replace("/^AND\s/", "", $search);
$sql = "SELECT * FROM products WHERE $search";
...

但我不知道,如何使用参数5>104<5来解决此问题。我想获得参数2,6或5大于或等于10且小于或等于5的产品。在MySQL中可能吗?如果是,怎么样?

1 个答案:

答案 0 :(得分:0)

LIKE非常慢;在同一场上多次执行它是非常低效的。想想查询如何生成简单易用,然后创建支持它的数据模型。像

这样的东西
SELECT * FROM my_table
   WHERE prop2 NOT NULL
   AND prop6 NOT NULL
   AND prop5 < 10
   AND prop4 < 5

易于阅读,易于维护和快速。这意味着您的每个属性都在其自己的列中(这也可以对您的属性进行索引)。它还允许您为您的属性使用可读名称,这可以节省您数小时的调试时间。