2013-02-25 64 views
0

我有一个表,看起来像这样只有基于ID

 
id   |   itemID  |   catID  |  Title 
---------------------------------------------------------------------------- 
0       3      4    Hello 
1       3      6    Hello 
2       4      4    Yo 
3       4      8    Yo 
4       5      2    Hi 
5       1      3    What 

我希望做一个PHP MySQL的选择,只有得到ITEMID出现一次得到表行的一个一次出现在MySQL的PHP​​。正如你可以看到它们是同一个项目,只是在不同的类别。

这是我试过

SELECT * FROM Table GROUP BY itemID 

似乎并没有工作,但它仍然只是表明重复。

+0

我认为唯一的就是你要找的关键字。 – dutt 2013-02-25 19:49:33

+1

如果只有一个,你还需要其他列,哪一个?第一个,最后一个?这对你来说可能没有关系,但它对如何构建查询很重要。 – 2013-02-25 19:50:42

+0

catID和常规ID无关紧要,我只需要标题。 – Talon 2013-02-25 19:55:54

回答

0

就MySQL而言,数据是唯一的,因为你需要所有的列。你必须更具体。

你只想要itemID(或其他列)?然后这样说:

select [column] from Table GROUP BY itemID

你想要的特定项目ID的最后一个项目?然后说:

select * from Table where itemID = 1 ORDER BY id DESC

还是第一个?

select * from Table where itemID = 1 ORDER BY id

如果这些都不是你想要的东西,那么你可能需要调整你的表。它看起来像你想为你的项目不同的类别。如果是这样,那么你会想将它们分成一个新的连接表,因为你有一个项目和类别之间的多对多关系。我建议您阅读数据库规范化,以免重复数据(例如您使用的是标题)。

0

如果你想要的所有不同itemIDs,你当然可以做所有不同itemIDs的一个选择,然后做基于第一查询结果的层层选拔需要很长的路。

select distinct(`itemID`) from Table 

然后在你的PHP代码,做这样的事情:

while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) 
    { 
    $itemID = $row['itemID']; 

    $sql2 ="SELECT * FROM Table WHERE 1 and `itemID`=\"$itemID\" limit 1"; 
    $result2 = @mysql_query($sql2, $connection); 
    while ($row2 = mysql_fetch_array($result2))  
     { 
      $id = $row2['id']; 
      $itemID = $row2['itemID']; 
      $catID = $row2['catID']; 
      $Title = $row2['Title']; 
     } 
    } 
+0

这不是最有效的方法,但是......就像任何对皮肤进行皮肤处理的方法一样,你最终会得到一只带皮的猫。请不要真的给猫擦皮。毛。 – 2013-02-25 20:08:18