【问题标题】:How to get rid of duplicated values in LEFT JOIN SQL Query如何摆脱 LEFT JOIN SQL 查询中的重复值
【发布时间】:2013-05-09 22:29:14
【问题描述】:

我有一个 cmets 表,其父子 cmets 具有以下字段

comments
    comment_id
    parent_id
    thread_id (Foreign Key)
    title
    body
    comment_date
    user_name

我想整理出这种形式的 cmets,首先出现父评论,然后是子 cmets,然后是下一个父评论,然后是子 cmets

我正在使用以下查询

SELECT c1 . * , c2 . * 
FROM comments c1
LEFT JOIN comments c2 ON c2.parent_id = c1.comment_id
WHERE c1.parent_id IS NULL 
AND c1.thread_id =122

它给出以下输出

你可以看到第一个表中有很多重复的行

我想要以下输出

您可以看到,在这个输出中,首先是父评论(在 parent_id 中有 NULL),然后是它的子 cmets,然后是下一个父评论,然后是它的子 cmets。

我怎样才能形成我的 SQL 查询来获得这个输出。 注意:(第二张图片不是任何查询的结果,我已经修改了它只是为了澄清我的观点,告诉你我想要什么样的输出。)

【问题讨论】:

  • 您想要不同的 cmets?
  • @chandresh_cool 这没有明显的问题。其实是排序问题。我想以这种形式来整理,首先是父评论,然后是它的所有子 cmets,依此类推。
  • 您只需要选择特定的记录而不是 c1.* ,C2.* 和一些 order by 子句,您的数据将看起来像您想要的方式
  • @RashidFarooq 但是使用 Group By 如果您要进行查询,您将不会得到重复的记录,否则请尝试其他方法...

标签: php mysql sql left-join


【解决方案1】:

没有一行是重复的,只是c1 注释被重复选中,因为它表面上是许多c2 cmets 的父级。听起来您实际上想要两个 单独的 查询。

SELECT * FROM comments WHERE parent_id IS NULL AND thread_id = 122
UNION
SELECT c2.* FROM comments c1 JOIN comments c2 ON c2.parent_id = c1.comment_id
WHERE c1.parent_id IS NULL AND c1.thread_id =122

【讨论】:

    【解决方案2】:
    SELECT c1 . *
    FROM comments c1
    RIGHT JOIN comments c2 ON c2.parent_id = c1.comment_id
    WHERE c1.parent_id IS NULL 
    AND c1.thread_id =122
    

    【讨论】:

      【解决方案3】:
      SELECT c1 . * , c2 . * 
      FROM comments c1
      LEFT JOIN comments c2 ON c2.parent_id = c1.comment_id
      WHERE c2.parent_id IS NOT NULL 
      AND c1.thread_id = 122
      

      我创建了表格并使用上面的查询进行了测试,它对我来说很好。如果上面对你不起作用,那么请导出评论表并在此处发布。我将发送确切的查询。

      再次,如果它在 cakephp 中,则在查找查询中使用“线程”,这对于数据库中的父子类型表结构总是有效的。

      等待回复...

      【讨论】:

      • 我已经尝试过这个查询,但它没有给出想要的结果。这是我的 cmets 表的结构 CREATE TABLE IF NOT EXISTS comments ( comment_id int(11) NOT NULL AUTO_INCREMENT, parent_id int(11) DEFAULT NULL, thread_id int(11) NOT NULL, @987654326 @ varchar(400) NOT NULL, body varchar(400) NOT NULL, date_commenttimestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, user_name varchar(100) NOT NULL, PRIMARY KEY (comment_id) ENGINE=InnoDB 默认字符集=utf8 AUTO_INCREMENT=12
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      相关资源
      最近更新 更多