我从数组中获取一些值,并在SQL查询中对这些值进行匹配。
此代码如下:
foreach($files as $ex){
$search = substr($ex,3,4);
echo $search . '<br>';
echo '<br>';
$sql = 'SELECT DISTINCT `pdb_code` FROM pdb WHERE `pdb_code` <> "' . $search . '" LIMIT 4';
}
$result = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_array($result)){
echo 'SQL' . $row['pdb_code'] .'<br>';
$pdb[] = $row['pdb_code'];
}
我遇到的问题是<>
似乎没有用。我甚至尝试使用!=
运算符,但仍然遇到同样的问题。
数组中$search
的输出为:
101m
102l
102m
103l
查询中SQL的输出仍为:
101m
102l
102m
103l
答案 0 :(得分:2)
您的代码似乎不合逻辑,因为您生成了大量的SQL语句,然后只执行最后一个。
但是我假设您要做的是获取文件列表,从每个文件名中提取一个字符串,然后列出表中尚未包含在字符串中的所有pdb_code值。
如果是这样的话就会这样做。它接受每个文件名,提取子字符串并将其转义,将结果放入数组中。然后它构建一个查询,将数组包含在NOT IN子句中: -
<?php
$search_array = array();
foreach($files as $ex)
{
$search = substr($ex,3,4);
echo $search . '<br>';
echo '<br>';
$search_array[] = mysql_real_escape_string($search);
}
if (count($search_array) > 0)
{
$sql = "SELECT DISTINCT `pdb_code` FROM pdb WHERE `pdb_code` NOT IN ('" . implode("','", $search_array) . "') LIMIT 4";
$result = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_array($result))
{
echo 'SQL' . $row['pdb_code'] .'<br>';
$pdb[] = $row['pdb_code'];
}
}
答案 1 :(得分:0)
您必须不使用:
SELECT * FROM table_name WHERE column_name NOT IN(value1, value2...)
答案 2 :(得分:0)
试试这个:
$searchIds = implode(',',$search);
$sql = "SELECT DISTINCT `pdb_code` FROM pdb WHERE `pdb_code` NOT IN ('$searchIds') LIMIT 4";