这就是我所拥有的:
我想做什么:
我真的不想使用循环以单独的查询方式运行数组中的每个字符串,我认为必须有一种更有效的方法来执行此操作。
任何想法都将不胜感激。我正在使用PHP 5.4.3和MySQL。
答案 0 :(得分: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 />";
}
?>
答案 1 :(得分: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();
答案 2 :(得分:1)
您应该使用MYSQL WHERE IN子句。
使用如下:
SELECT * FROM TABLE_NAME WHERE COLUMN_NAME IN ('.implode(', ', $array).')'