在我的名为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>10
和4<5
来解决此问题。我想获得参数2,6或5大于或等于10且小于或等于5的产品。在MySQL中可能吗?如果是,怎么样?
答案 0 :(得分:0)
LIKE
非常慢;在同一场上多次执行它是非常低效的。想想查询如何生成简单易用,然后创建支持它的数据模型。像
SELECT * FROM my_table
WHERE prop2 NOT NULL
AND prop6 NOT NULL
AND prop5 < 10
AND prop4 < 5
易于阅读,易于维护和快速。这意味着您的每个属性都在其自己的列中(这也可以对您的属性进行索引)。它还允许您为您的属性使用可读名称,这可以节省您数小时的调试时间。