Mysql过滤查询条件

时间:2013-11-26 14:18:35

标签: mysql

我有两列,如

name    price
a|b|c   100|200|150
x|y|z   150|100|160

在这里,我想得到价格> 150的价格。我不知道怎么爆炸?感谢

1 个答案:

答案 0 :(得分:1)

你无法在MySQL中爆炸。我强烈建议您将表重组为关系表(即每个名称和价格应占据一行)。

有可能通过子串进行某种类型的数值比较,但我认为只查询整个表并通过php过滤结果会更容易(我假设你使用php,因为你说过explode,通常在其他语言中称为split

foreach ($rows as $row) {
    $names = explode("|", $row["name"]);
    foreach (explode("|", $row["price"] as $idx => $price) {
        if ($price > 150) {
            $all_names[] = $name[$idx];
        }
    }
}

这当然假设名称/价格列索引正确对齐。它也很昂贵,因为它必须查询整个表并且不使用任何(MySQL)索引。


要规范化数据,您可以做的是有一个名为Groups的表groupID。然后,您的当前表格为GroupID, name, price元组。您的数据如下所示:

groupID    name    price
1          a       100
1          b       200
1          c       150
2          x       150
2          y       100
2          z       160

然后,您只需检查WHERE price > 150,如果已将price编入索引,则速度极快。它还允许您按组搜索 - 这在某些情况下可能更有用甚至更快。

要根据您已有的内容设置上表,您必须查询整个表格,然后explode查询名称/价格,并使用现有的组ID插入相应的索引。