首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MySQL -选择与参数匹配的列

MySQL -选择与参数匹配的列
EN

Stack Overflow用户
提问于 2016-05-03 03:16:19
回答 1查看 176关注 0票数 0

在我的名为products的表中,我有列parameters,其中的字符串如下:

代码语言:javascript
运行
复制
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从表中选择产品。如下所示:

代码语言:javascript
运行
复制
$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,4小于或等于5的产品。这在MySQL中是可能的吗?如果是,是如何实现的?

EN

回答 1

Stack Overflow用户

发布于 2016-05-03 05:12:55

LIKE非常慢;在同一个字段上执行多次是非常低效的。想一想这个查询是如何生成的,然后创建一个支持它的数据模型。就像这样

代码语言:javascript
运行
复制
SELECT * FROM my_table
   WHERE prop2 NOT NULL
   AND prop6 NOT NULL
   AND prop5 < 10
   AND prop4 < 5

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36989970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档