我有一个存储图像信息的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`
我确信有一个简单的解决方案,但我不知道它是什么......所以任何帮助都会非常感激。
提前致谢!
答案 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分成单独的数字。