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 はそのままで 0.5 秒近くかかります。「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 に答える
0

あなたの区切り文字が,

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