我有两列,如
name price
a|b|c 100|200|150
x|y|z 150|100|160
在这里,我想得到价格> 150的价格。我不知道怎么爆炸?感谢
答案 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插入相应的索引。