0

我正在尝试找到一种更好的方法来搜索存储在 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”之类的数据。我非常需要搜索一个特定的变量。

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

4

3 回答 3

1

检查这个:->

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

或者

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

于 2013-08-22T09:14:57.937 回答
1

那这个呢 :

$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

于 2013-08-22T09:09:41.463 回答
0

暗示你的分隔符是,

WHERE `category` REGEXP ',?[SEARCHED-VALUE],?';
于 2013-08-22T09:09:00.437 回答