DISTINCT和<>的输出来自SQL Query问题

时间:2016-06-07 08:47:46

标签: php mysql

我从数组中获取一些值,并在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

3 个答案:

答案 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";