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