我正在尝试找到一种更好的方法来搜索存储在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”等数据。我非常需要搜索特定的变量。
- 感谢大家的即时回复。我可以在几个小时内在这里测试它们。我很欣赏这些建议。
答案 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