我有一个包含所有文章的 articles
表。
我有一个 comments
表,其中包含一个 article_id
字段,其中包含文章的评论。
我首先像这样进行连接查询:
SELECT Article.*, Comment.* FROM articles LEFT JOIN comments As Comment ON(Article.id = Comment.article_id)
我的数据格式如下:
Article1 Comment1
Article1 Comment2
Article1 Comment3
然后我使用了分组依据:
SELECT Article.*, Comment.* FROM articles LEFT JOIN comments As Comment ON(Article.id = Comment.article_id) GROUP BY Article.id
我的数据格式如下:
Article1 Comment1
我希望我的数据格式如下:
Article1 Comment1
Comment2
Comment3
是否有使用 MySQL 来将我的数据格式化为这样?如果可能的话,避免子查询?
最佳答案
正如评论所说,最好在表示层而不是数据层中执行此操作。 MySQL 和其他数据库引擎擅长存储数据、以最佳方式执行查询并获取结果。没有一种简单的方法可以满足您的要求。当然你可以做这样的事情,但是在前端做会更有效率。我使用 C# 和 SQL Server,除了简单地使用 SQL 检索数据之外,我想不出有任何一种情况可以做更多的事情。无论您想做什么,使用表示层进行处理都要容易得多。您的一条评论询问了如何处理一百万行。我经常使用的几个表的行数超过十亿。我仍然不会在 SQL Server 中进行任何格式化。
您问 GROUP BY 函数的用途是什么。简而言之,GROUP BY 表示将记录分组,其中 GROUP BY 子句中的所有列都相同。 GROUP BY 最常见的用途之一是计数和聚合函数(COUNT()、SUM() 等)。考虑以下查询:
SELECT
Customer_Id,
COUNT(Order_Id),
SUM(Amount_Paid),
SUM(Amount_Paid) / COUNT(Order_Id)
FROM dbo.Sales
GROUP BY Customer_Id
在此查询中,我们从虚构的 Sales 表中选择记录。当我们说GROUP BY Customer_Id
时,我们基本上是说“创建组并将具有相同Customer_Id的所有记录放入同一组中”。如果我们想要计算客户已下订单的数量 (COUNT(Order_Id)
),或者如果我们想要查看客户在我们商店花费了多少钱 (SUM( Amount_Paid
),或者即使我们想查看每个客户每个订单花费的平均金额 (SUM(Amount_Paid)/COUNT(Order_Id)
)。
这只是一个简单的示例,用于展示 GROUP BY 在基本情况下如何工作。然而,它并不是为您尝试使用它做的事情而设计的。在某些情况下,它会消除重复记录(尽管如果这就是您想要做的全部,DISTINCT
可能会更容易),但它不太适合查询输出的高级格式化。
关于php - Mysql如何处理JOIN和重复条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25233697/