Php 选择DISTINCT仍然显示重复结果

Php 选择DISTINCT仍然显示重复结果,php,Php,我有一个HTMLselect表单,由使用select DISTINCT的SQL查询填充。。。 这样做的目的是不显示数据库中的重复值,它几乎可以正常工作,但在某些情况下会出现问题。为了填充SQL列,我使用PHP读取一个带有分隔符的TXT文件,并使用explode函数。如果我在TXT文件中有10个重复的列,在我的HTML上它显示2,而不是只有1。。。我注意到1包含数据库中的9个条目,另一个包含1个条目,它总是TXT文件的最后一行。 恢复:TXT文件的最后一行在HTML选择表单上始终重复。 检查数据库

我有一个HTMLselect表单,由使用select DISTINCT的SQL查询填充。。。 这样做的目的是不显示数据库中的重复值,它几乎可以正常工作,但在某些情况下会出现问题。为了填充SQL列,我使用PHP读取一个带有分隔符的TXT文件,并使用explode函数。如果我在TXT文件中有10个重复的列,在我的HTML上它显示2,而不是只有1。。。我注意到1包含数据库中的9个条目,另一个包含1个条目,它总是TXT文件的最后一行。 恢复:TXT文件的最后一行在HTML选择表单上始终重复。 检查数据库,一切正常,我真的不知道为什么它总是在最后一个重复。 我讲述了生成SQL条目的PHP,因为我不确定问题是在包含HTML select的PHP中还是在填充数据库的PHP中。。。我相信问题出在PHP和HTMLSELECT中,因为我正在数据库中查找,一切都正常。此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>

在我看来,错误在于从文件填充表时,其中一个值与其他值有细微的差异

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

如果是这种情况,您应该能够通过在数据库中运行
trim()
或类似程序来纠正它


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

立即更正数据。在我看来,错误在于从文件填充表时,其中一个值最终与其他值略有不同

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

如果是这种情况,您应该能够通过在数据库中运行
trim()
或类似程序来纠正它


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

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

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

希望这有帮助。

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

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


希望这能有所帮助。

我并没有真正读过那个很长的句子,但如果你用那个SQL得到了你认为是重复的东西,我敢打赌你有一个带有尾随空格/换行符的条目。在插入条目之前,对其执行trim()。代码中有两个细节:1)PHP短开放标记(
显示运行“Selectdistinct basename FROM dumpsbase where sall=0”的结果直接针对数据库引擎。需要确定网页显示、查询或数据插入是否有问题。这意味着在每个步骤中查看数据。当我直接在数据库中执行查询时,它会显示重复的结果…我将尝试修剪()它…我并没有真正读过那个很长的句子,但如果你用那个SQL得到了你认为是重复的东西,我敢打赌你有一个带有尾随空格/换行符的条目。在插入它们之前对条目执行trim()。代码中有两个小错误:1)PHP短开放标记(
显示运行结果直接针对数据库引擎“选择DISTINCT basename FROM dumpsbase where sall=0”。需要确定网页显示、查询或数据插入是否有问题。这意味着在每个步骤中查看数据。当我直接在数据库中执行查询时,它会显示重复的结果…我将尝试修剪()它…这确实有帮助,但最好的解决方案是规范化数据库中的数据并纠正加载数据问题我完全同意@TiagoCésarOliveira。是的,我尝试过,但仍然显示重复的结果…编辑:事实上,它在我的html表单上显示未知,当我直接从phpMyAdmin执行查询时显示重复。是的,我也这么认为。是TXT中的最后一组字符导致了这个错误。这行代码类似于:457896 | Binary | USA | 483724958498495=190 | 01“|”是分隔符,html select中得到的重复值是最后一个01。我正在尝试解决这个问题。我添加了代码,将TXT中的数据放入sql数据库…查看ma在post中。这确实有帮助,但最好的解决方案是在数据库中规范化数据并纠正加载数据问题。我完全同意@TiagoCésarOliveira。是的,我尝试过,但仍然显示重复的结果…编辑:事实上,它在我的html表单上显示未知,当我直接从phpMyAdmin执行查询时,它显示重复。是的,我想o、 是TXT中的最后一组字符导致了这个错误。这行代码类似于:457896 | Binary | USA | 483724958498495=190 | 01“|”是分隔符,html select中的重复值是最后一个01。我正在尝试解决这个问题。我添加了代码,将TXT中的数据放入sql数据库…查看我做了:更新dumpsbase SET basename=TRIM(basename),但它仍然显示重复的结果…我做了:更新dumpsbase SET basename=TRIM(basename),但它仍然显示重复的结果。。。