SQL连接不返回重复数据

时间:2012-03-17 21:28:18

标签: php mysql sql

所以我正在构建一个网站,基本上用户可以编写故事,每个故事可以有多个延续,但我正在试图弄清楚如何查询我的数据库,以便我可以返回第一个故事和相关的延续有了这个故事,没有重复输入,如果我只是写一个这样的连接语句,我会得到:

SELECT idStories, 
       Stories.Title, 
       Stories.Num_parts, 
       Stories.Story, 
       Stories.Date_poste,     
       idStory_continue, 
       Story_continue.Users_idUsers, 
       Story_continue.Title, 
       Story_continue.Story, 
       Story_continue.Date_posted, 
       Story_continue.Part_num 
  FROM Stories s
LEFT JOIN Story_continue sc ON sc.Stories_idStories = s.idStories   

所以我的问题是,在没有获得原始故事的多个版本的情况下返回此类查询的有效方法是什么。例如,当我查询这个时,我会得到所有原始故事,我会得到延续,但如果每个故事有多个延续,它会重复原始故事。如果您不能以这种方式进行提供信息的查询,您将如何在PHP中解决此问题?

3 个答案:

答案 0 :(得分:2)

在开头使用SELECT DISTINCT子句

答案 1 :(得分:1)

您可以尝试GROUP BY子句,但如果您想要所有的story_continue数据,则需要执行GROUP_CONCAT,这可能会变得混乱。
我发现像这样拆分查询更容易。通常它比JOIN / GROUP BY更快。

$sql = "SELECT idStories, 
           Stories.Title, 
           Stories.Num_parts, 
           Stories.Story, 
           Stories.Date_posted
      FROM Stories";

$stories = $db->fetchAll($sql);

$ids = array();
foreach($stories as $row){
    $ids[] = $row['idStories'];
}
$ids = implode(",",$ids);

$sql = "SELECT idStory_continue, 
           Story_continue.Users_idUsers, 
           Story_continue.Title, 
           Story_continue.Story, 
           Story_continue.Date_posted, 
           Story_continue.Part_num,
           Stories_idStories
        FROM Story_continue IN ($ids)";

$rows = $db->fetchAll($sql);

$continues = array();
foreach($rows as $row){
    // Continues can be referenced by the story id
    $continues[$row['Stories_idStories']][] = $row;
}

答案 2 :(得分:0)

或者您无法尝试使用GROUP BY CLAUSE

http://www.tutorialspoint.com/mysql/mysql-group-by-clause.htm