MySQL使用GROUP BY语句返回较少的行

时间:2010-03-14 04:04:39

标签: mysql

我有一个存储图像信息的MySQL数据库。现在它只有三行存储在数据库中,并且每一行都与某些内容相关联,例如,通过键列的唯一博客帖子。

截至目前,一个“博客文章密钥”有一个图像,一个图像有两个图像。

当我运行此查询时,MySQL将返回所有三行。

SELECT `id`, `key`, `url`
FROM (`images`)
WHERE `key` = 'TpaS4G5h'
OR `key` = '78855e44'

但是,当我添加GROUP BY语句时,我只获得两行...每个键一行。

SELECT `id`, `key`, `url`
FROM (`images`)
WHERE `key` = 'TpaS4G5h'
OR `key` = '78855e44'
GROUP BY `key`

我确信有一个简单的解决方案,但我不知道它是什么......所以任何帮助都会非常感激。

提前致谢!

4 个答案:

答案 0 :(得分:7)

GROUP BY将具有group by值的所有行分组为一行,因此它正在按照预期的那样进行。如果希望在连续的行中返回具有相同键的行,请改为ORDER BY

答案 1 :(得分:0)

此查询不需要分组!按组将所选列的相同值分组为单行。

答案 2 :(得分:0)

您在第一个查询中指定了两个键并返回三行,这意味着您在键列中列出了一个副本。如果您执行

,请进行验证
  select distinct key from images 

你应该只看到两行。这意味着如果您按此列分组,则所有具有此密钥的结果将汇总在结果中,以解释您所看到的行为。

答案 3 :(得分:0)

GROUP BY用于将与分组条件匹配的任何行“折叠”为单行,因此您可以对它们使用聚合函数。 SUM(),COUNT()等。

如果您的意思是要对记录进行分组,以便您可以在单个fetchrow调用中检索与每个键关联的所有图像,那么,这不是GROUP BY的用途。您正在尝试将基于多行的数据集转换为单行。如果您要做的只是检索这些图像的ID,并在每行一次获取中执行,您可以使用类似

的内容
SELECT key, group_concat(id)
FROM images
WHERE key=XXX or key=YYY
GROUP BY key

这会给你一个如下所示的数据集:

key     group_concat(id)
------------------------
xxx     100,101
yyy     102,103

但是这需要在脚本中进行后期处理,以将这些连接的ID分成单独的数字。