2011-10-10 48 views
0

我想为我的问题提出正确的查询。基本上,我可能有过完全相同的结果为100,如果我做的:预期多个结果时正确的SELECT查询

$query = "SELECT * FROM highway WHERE state = 'VA'"; 
    $result = mysql_query($query) or die(mysql_error()); 
    while ($row = mysql_fetch_array($result)) { 
    //code 

有了这个,我会得到:

95 
    95 
    95 
    95 (and on and on...) 
    64 
    64 
    64 (and on and on...) 

什么是正确的查询只得到:

95 
    64 
    66 
    81 
+0

请提供'DESCRIBE公路输出;' – Tom

回答

2

可以使用DISTINCT关键字:

ALLDISTINCT选项指定是否返回重复行应为 。 ALL(默认值)指定返回的所有匹配行应为 ,包括重复项。 DISTINCT指定从结果集中删除 重复行。指定 选项是错误的。 DISTINCTROWDISTINCT的同义词。

所以:

SELECT DISTINCT * FROM highway WHERE state = 'VA' 

但是如果你考虑到结果集的某些列时有重复,在我看来,你的数据库表的设计可能不佳。你有没有考虑进一步normalising他们?

+0

这些表被设置为这样: 状态 - > highway->×[出口>设有 由于有在各公路多个出口,它是我可以想出最好的方式来设计它。 这正是我正在寻找的,谢谢。 – Go3Team

+0

@ Go3Team:你一定要规范化。 –

0

在您的查询中使用GROUP BY columname

$query = "SELECT * FROM highway WHERE state = 'VA' GROUP BY columnameof9596etc."; 
+0

这也有帮助,谢谢。 – Go3Team