在我的名为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,4小于或等于5的产品。这在MySQL中是可能的吗?如果是,是如何实现的?
发布于 2016-05-03 05:12:55
LIKE非常慢;在同一个字段上执行多次是非常低效的。想一想这个查询是如何生成的,然后创建一个支持它的数据模型。就像这样
SELECT * FROM my_table
WHERE prop2 NOT NULL
AND prop6 NOT NULL
AND prop5 < 10
AND prop4 < 5易读,易维护,速度快。这意味着您的每个属性都在其自己的列中(这也支持对您的属性进行索引)。它还允许您对属性使用可读的名称,这本身就可以节省您的调试时间。
https://stackoverflow.com/questions/36989970
复制相似问题