在包含大量数据mysql的行中查找数据

时间:2016-01-04 14:27:27

标签: php mysql foreach

我有一个像这样的mysql表(价格):

+------------------------------------------------------------------------+
|          ID      DATA                       INFO                       |
+------------------------------------------------------------------------+
|          1       2015-05-29     (3.50-22-22),(3.50-21-22),(3.50-20-22) |
|          2       2015-05-30     (4.50-22-22),(1.50-11-22),(3.00-10-02) |
+------------------------------------------------------------------------+

现在我想做一个只查找包含字符串的值的查询" -22-22)"特别是我只想获得2个值(3.50-22-22)和(4.50-22-22)

所以我这样做(部分)查询

string="-22-22)"

$sql = "SELECT * FROM price WHERE  info like '%$string%'";
$array = mysqli_query($sql,$con);
while($row=mysqli_fetch_array($array)){
$info = $rows['info'];
$result= explode(",", $info);

如何继续此查询以获取我的结果?

2 个答案:

答案 0 :(得分:1)

您可以使用array_filter来完成此操作,您可以传入$ result并编写自定义回调来过滤您需要的内容。但这取决于您的最终需求,例如,如果您可以随时删除第一个键,然后取消设置,取消设置($ results [0]),然后仅返回剩余值(array_values)< / p>

Per @cicciopasticcio的评论。

您可以尝试这样的事情:

INT

这是可行的代码,我在命令行测试了它,$ finalResults保存了两个预期的结果。

return array_filter($results, function($item) use ($string) {
    return ( strpos($item, $string) !== false );
});

答案 1 :(得分:0)

替换它:

$sql = "SELECT * FROM price WHERE  info like '%$string%'";

有了这个:

$sql = "SELECT * FROM price WHERE  info REGEXP('$string')";

REGEXP会在您的表格中找到当前存储信息中的值。

否则你也可以尝试:

$sql = "SELECT * FROM price WHERE  info IN('$string')";

OR

$sql = "SELECT * FROM price WHERE  FIND_IN_SET(info, '$string')";