簡體   English   中英

關於如何根據數據庫表檢查數組的建議

[英]Suggestions on how to check an array against a database table

這是我所擁有的:

  1. 1個數據庫表包含大約2000條記錄,已建立索引。 (重要的列是25個字符的字符串)。
  2. 包含約30個25個字符的字符串的數組

我想做的是:

  1. 我需要對照數據庫表檢查數組以查找任何字符串匹配項。
  2. 我需要能夠確定數組中哪些值僅與表中的任何值匹配(如果有)

我真的不是必須使用循環以單獨的查詢方式針對表運行數組中的每個字符串,我想必須有一種更有效的方法來執行此操作。

任何想法,將不勝感激。 我正在使用PHP 5.4.3和MySQL。

只需使用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 />";
}

?>

如其他人所建議,您可以使用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();

您應該使用MYSQL WHERE IN子句。

用法如下:

SELECT * FROM TABLE_NAME WHERE COLUMN_NAME IN ('.implode(', ', $array).')'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM