SELECT DISTINCT仍显示重复结果

时间:2013-04-18 21:53:25

标签: php

我有一个HTML 选择表单,使用SELECT DISTINCT填充SQL查询... 我们的想法是不显示数据库中的重复值,它几乎可以工作,但在某些情况下它会产生问题。为了填充SQL列,我正在使用PHP读取带有分隔符和爆炸功能的TXT文件。如果我在TXT文件中有10个重复的列,在我的HTML上显示2,而不是只有1 ...而且我注意到1是来自数据库的9个条目,而另一个有1个条目总是TXT文件的最后一行。 恢复:TXT文件的最后一行始终在HTML选择表单上重复。 检查数据库,一切看起来都不错,我真的不知道为什么它总是在最后一个重复。 我告诉PHP进入SQL条目,因为我不确定问题是在包含HTML选择的PHP中还是在填充数据库的PHP中...我相信问题出在PHP的PHP中选择,因为我正在查看数据库,一切都很好。这个php中的SQL查询是这样的:

<td class="formstyle"><select name="basenamelst" class="formstyle" id="basenamelst">
<option value="Any">Any</option>
<?
$sql = mysql_query("SELECT DISTINCT basename FROM dumpsbase where sold=0");
while($row = mysql_fetch_assoc($sql))
  {
    if($row['basename'] == "")
     {
    echo '<option value="'.htmlspecialchars($row['basename'], ENT_QUOTES, 'UTF-8').'">unknOwn</option>'; 
     }
    else
     {
       echo '<option value="'.htmlspecialchars($row['basename'], ENT_QUOTES, 'UTF-8').'">'.htmlspecialchars($row['basename'], ENT_QUOTES, 'UTF-8').'</option>'; 
     }
   }
?>
</select>

请记住:如果我上传到数据库10重复列,则会在select上显示2。一个有9个条目,另一个有1个条目(总是我的TXT文件的最后一行)... 好吧,很多人告诉我修剪()列,它仍然显示重复...所以我得出结论,我在加载TXT数据库时遇到了一些问题。这是我获取值放在数据库中的代码:

$file = fopen($targetpath, "r") or exit("Unable to open uploaded file!");

while(!feof($file))
 {
   $line = fgets($file);
   $details = explode(" | ", $line);

   foreach($details as &$value) // clean each field
    {
      $value = mysql_real_escape_string($value);
      if($value == "")
     {
       $value = "NONE";
     }
     }
   unset($value);
 mysql_query("INSERT INTO dumpsbase VALUES('NULL', '$details[0]', '$details[1]', '$details[2]', '$details[3]', '$details[4]', '0', '$price', 'NONE', now(), 'NONE', 'NONE')") or die ("Uploading Error!");

2 个答案:

答案 0 :(得分:2)

在我看来,错误就是当你从文件中填充表时,其中一个值与其他值的结果略有不同。

这是最后一行不同的事实让我想知道每个值中是否包含换行符(最后一行除外)。

如果是这种情况,您应该可以通过在数据库中运行trim()或类似内容来纠正错误。

[编辑]理想情况下,您希望尽早执行此操作,即更正数据,而不是在访问数据时记住它是错误的。如果您无法找到导致初始导入混乱的原因,您可以使用UPDATE dumpsbase SET basename = TRIM(basename)

立即更正数据

答案 1 :(得分:1)

尝试将您的查询更改为以下内容:

SELECT DISTINCT TRIM(basename) FROM dumpsbase WHERE sold=0

希望这有帮助。