使用PHP搜索存储在mySql列中的数组的最快方法

时间:2013-08-22 09:03:27

标签: php mysql

我正在尝试找到一种更好的方法来搜索存储在mySql数据库中的数组,以决定是否要从该行返回值。目前我正在解析整个数组,如果它包含我想要的内容,我继续做我想做的任何事情,如果没有,我继续前进到下一行。这太慢了。

我有一个存储在列中的数组,我们称之为类别。例如:1,zzz31zzz,31,4,5

我想搜索该列,如果它包含“31”,则继续操作我的数据。

所以我这样访问我的数据库:

$sql = "SELECT * FROM db WHERE arg=1 AND category != ''";
$sqlresult = mysql_query($sql);
while($row = mysql_fetch_array($sqlresult))
{
  $vals = explode(',', $row['category']);
  foreach($vals as $val)
  {
    if($val == 31)
    {
      //do something
    }
    else
    {
    //dont
    }
  }
}

我觉得有一个明显的答案,我只是没想到。谁能提出更好的选择?我将以这种方式处理数千个阵列,并且3将花费近半秒的时间。我会在搜索中使用通配符时犹豫不决,因为我可能会有“1311”等数据。我非常需要搜索特定的变量。

- 感谢大家的即时回复。我可以在几个小时内在这里测试它们。我很欣赏这些建议。

3 个答案:

答案 0 :(得分:1)

检查一下: - >

while($row = mysql_fetch_array($sqlresult))
  {
  $vals = explode(',', $row['category']);
  IF(in_array('31',$vals)
   {
    //do something
   }
  else
   {
    //dont
    } 
  }

您可以将FIND_IN_SET()与mysql查询一起使用

答案 1 :(得分:0)

暗示您的分隔符为,

WHERE `category` REGEXP ',?[SEARCHED-VALUE],?';

答案 2 :(得分:0)

这个怎么样:

$sql = "SELECT * FROM db WHERE arg=1 AND (category LIKE '%,31,%' OR category = 31 OR category LIKE '31,%' OR category LIKE '%,31'";

如果我得到你想要的东西,你就不会匹配'1311'等。

否则,请查看REGEXP SQL function