0

ここに私が持っているものがあります:

  1. インデックス付きの約 2000 レコードを含む1 つのデータベース テーブル。(重要な列は 25 文字の文字列です)。
  2. 25 文字の文字列を約 30 個含む配列

私がしたいこと:

  1. 配列データベース テーブルと照合して、一致する文字列を見つける必要があります。
  2. 配列内のどの値がテーブル内の値とのみ一致するかを特定できる必要があります。

ループを使用して、配列内の各文字列をテーブルに対して個別のクエリ方式で実行する必要はありません。これを行うには、より効率的な方法が必要だと考えています。

どんなアイデアでも大歓迎です。PHP 5.4.3 と MySQL を使用しています。

4

3 に答える 3

3

IN句を使用するだけです:-

SELECT somecolumn
FROM someTable
WHERE someCoumn IN ('a string', 'another string', 'etc')

おそらくPHPでそれを行う(配列がすでにSQLセーフになるようにエスケープされていると仮定):-

$sql = "SELECT somecolumn
FROM someTable
WHERE someCoumn IN ('".implode("','", $someArray)."')";

各項目 (0 の項目を含む) にいくつの一致があるかをカウントしたい場合は、次のようなものが良いかもしれません:-

<?php

$result = $db->query("CREATE TEMPORARY TABLE CheckValues
(CheckValue varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`CheckValue`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 ;");

$result = $db->query("INSERT INTO CheckValues (CheckValue) VALUES('".implode("','", $someArray)."')");

$result = $db->query("SELECT CheckValue, COUNT(b.someCoumn) AS someCount
FROM CheckValues a
LEFT OUTER JOIN someTable b ON a.CheckValue = b.someCoumn
GROUP BY CheckValue");

while ($row = $result->fetch_assoc()) 
{
    echo "$row[CheckValue] - $row[someCount] <br />";
}

?>
于 2013-03-05T09:18:46.317 に答える
2

他の人が示唆したように、IN句を使用できます。エスケープとインジェクションを心配する必要がないようMySQLiに、代わりに使用するサンプルを次に示します。mysql_*

$criteria=array(/* string-to-search */);
$sql="SELECT * FROM `table` WHERE `column` IN (".implode(",",array_fill(0,count($criteria),"?")).")";
$stmt=$mysqli->prepare($sql);

call_user_func_array(array($stmt,"bind_param"),array_merge(array(str_repeat("s",count($criteria))),$criteria));

$stmt->execute();
$result=$stmt->get_result();
于 2013-03-05T09:28:50.477 に答える
1

MYSQL WHERE IN 句を使用する必要があります。

以下のように使用します。

SELECT * FROM TABLE_NAME WHERE COLUMN_NAME IN ('.implode(', ', $array).')'
于 2013-03-05T09:19:37.177 に答える