Mysql 在groupby之前查询不工作是否需要orderby?
这应该是一个主题列表,其中有新的附件 此查询中的Mysql 在groupby之前查询不工作是否需要orderby?,mysql,sql,greatest-n-per-group,Mysql,Sql,Greatest N Per Group,这应该是一个主题列表,其中有新的附件 此查询中的分组依据无法正常工作。(是的。) 它应该从每个最近有附件的线程中提取一个具有代表性的附件——不仅是新线程,还有任何线程。结果将是一个缩略图链接到相应新图像发布的线程 相反,它不起作用。它目前有两个问题。第一个问题是,它显示线程中的第一个附件,而不是最近的附件。第二个问题是,它按线程创建日期排序。我希望附件创建日期是顺序,线程列表是根据其中包含最新附件的线程排序的。因此,旧线程即使有最近的附件,也不会上升到顶部。我需要先选择一个子项来订购吗?我怎样才
分组依据
无法正常工作。(是的。)
它应该从每个最近有附件的线程中提取一个具有代表性的附件——不仅是新线程,还有任何线程。结果将是一个缩略图链接到相应新图像发布的线程
相反,它不起作用。它目前有两个问题。第一个问题是,它显示线程中的第一个附件,而不是最近的附件。第二个问题是,它按线程创建日期排序。我希望附件创建日期是顺序,线程列表是根据其中包含最新附件的线程排序的。因此,旧线程即使有最近的附件,也不会上升到顶部。我需要先选择一个子项来订购吗?我怎样才能做到这一点
事先非常感谢你
SELECT *
FROM smf_attachments AS att
INNER JOIN smf_messages AS m ON (m.id_msg = att.id_msg)
INNER JOIN smf_topics AS t ON (t.id_topic = m.id_topic)
LEFT JOIN smf_members AS mem ON (mem.id_member = m.id_member)
LEFT JOIN smf_attachments AS thumb ON (thumb.id_attach = att.id_thumb)
WHERE att.attachment_type = 0
AND t.id_board = 3
GROUP BY t.id_topic
ORDER BY att.id_attach DESC
LIMIT 2
(编辑)
假设我们有三个主题id,每个主题id有5个附件。附件号越高,表示附件越新;主题id越高,表示主题越新
topic_id 1|attachment 3,6,13,14,15
topic_id 2|attachment 1,2,4,5,12
topic_id 3|attachment 7,8,9,10,11
在上述情况下,查询应提取2条记录(限制2):
因为我只希望每个主题有一个附件,所以有最新附件的两个主题是主题1和主题2(分别有附件15和附件12)。尽管主题3是最近的,但在本例中它不会是一个结果,因为它的附件较旧
(编辑)
我尝试了systemmatrix提供的解决方案,但它仍然按主题id创建日期排序,而不是按包含最新附件的主题排序。我试图把上面的问题说得更清楚。有什么帮助吗?先谢谢你
SELECT *
FROM smf_attachments AS att
INNER JOIN smf_messages AS m ON (m.id_msg = att.id_msg)
INNER JOIN smf_topics AS t ON (t.id_topic = m.id_topic)
LEFT JOIN smf_members AS mem ON (mem.id_member = m.id_member)
LEFT JOIN smf_attachments AS thumb ON (thumb.id_attach = att.id_thumb)
WHERE att.attachment_type = 0
AND t.id_board = 3
GROUP BY t.id_topic
ORDER BY att.id_attach DESC
LIMIT 2
(编辑)
我现在看到它是按每个主题中第一个附件的日期排序的。主题由最新的第一个附件。我需要与最近的附件或最后的附件主题
编辑
我做了一个改变,给了我正确的主题列表。这是新代码
SELECT att.id_thumb, att.id_msg, att.attachment_type, att.id_attach, distinct on (t.id_topic)
FROM smf_attachments AS att
INNER JOIN smf_messages AS m ON (m.id_msg = att.id_msg)
INNER JOIN smf_topics AS t ON (t.id_topic = m.id_topic)
LEFT JOIN smf_members AS mem ON (mem.id_member = m.id_member)
LEFT JOIN smf_attachments AS thumb ON (thumb.id_attach = att.id_thumb)
WHERE att.attachment_type = 0
AND t.id_board = 3
ORDER BY max(att.id_attach) DESC
LIMIT 2
现在唯一的问题是如何让它显示正确的缩略图附件?它仍然显示各自主题中的第一个附件,而不是最后一个附件。有什么帮助吗?
提前感谢。如果这是每个主题仅需要的3列最新记录
SELECT *
FROM smf_attachments AS att
INNER JOIN smf_messages AS m ON (m.id_msg = att.id_msg)
INNER JOIN smf_topics AS t ON (t.id_topic = m.id_topic)
LEFT JOIN smf_members AS mem ON (mem.id_member = m.id_member)
LEFT JOIN smf_attachments AS thumb ON (thumb.id_attach = att.id_thumb)
WHERE att.attachment_type = 0
AND t.id_board = 3
GROUP BY t.id_topic
ORDER BY att.id_attach DESC
LIMIT 2
- 收件人:拇指
- 附件id\U msg
- 附件类型
id\u attach
排序的主题的最新id\u thumb
,您可以将id\u thumb
的表达式编写为
SUBSTRING_INDEX(
GROUP_CONCAT(att.id_thumb ORDER BY att.id_attach DESC SEPARATOR '||'),
'||',1) AS id_thumb
- 集团公司(出口)
id\u thumb
s进行分组,并为您提供
列表以双精度| |分隔,也可以根据更改分隔符
您在上面的需求我已经使用了|作为上面的结果
函数将类似于thumb1 | | thumb2 | | thumb3 | | thumb4
这将是
按id\u附件降序排列
注意结果被截断为group_concat_max_len系统变量给定的最大长度,该系统变量具有默认值
1024个。该值可以设置得更高,但有效最大值
返回值的长度受
允许的最大数据包数
- 子字符串索引(str、delim、count)
From docs返回计数前字符串str中的子字符串
分隔符delim的出现。如果计数为正,则所有
最后一个分隔符(从左边开始计数)的左边是
返回。如果计数为负数,则一切都在决赛的右边
返回分隔符(从右侧开始计数)。子字符串_索引()
搜索delim时执行区分大小写的匹配
现在,您的最终查询如下所示
SELECT
SUBSTRING_INDEX(GROUP_CONCAT(att.id_thumb ORDER BY att.id_attach DESC SEPARATOR '||'),'||',1) AS id_thumb,
SUBSTRING_INDEX(GROUP_CONCAT(att.id_msg ORDER BY att.id_attach DESC SEPARATOR '||'),'||',1) AS id_msg,
SUBSTRING_INDEX(GROUP_CONCAT(att.attachment_type ORDER BY att.id_attach DESC SEPARATOR '||'),'||',1) AS attachment_type,
MAX(att.id_attach) AS id_attach_max,
t.id_topic
FROM
smf_attachments AS att
INNER JOIN smf_messages AS m ON (m.id_msg = att.id_msg)
INNER JOIN smf_topics AS t ON (t.id_topic = m.id_topic)
LEFT JOIN smf_members AS mem ON (mem.id_member = m.id_member)
LEFT JOIN smf_attachments AS thumb ON (thumb.id_attach = att.id_thumb)
WHERE att.attachment_type = 0
AND t.id_board = 3
GROUP BY t.id_topic
ORDER BY id_attach_max DESC
LIMIT 2
使用mysql或sql?嘿,Johnson Jason,我已经介绍了一个,很长的一段时间,用我的编辑猜测(SMF是简单的论坛机器),你能验证一下(或者看看我对你的帖子做了什么)?请根据需要自由编辑/回滚。无论如何,这似乎是一个典型的每组最大N的问题,我已经添加了相应的标签来对您的问题进行分类。你可以看看,你可能会在其中的一些中找到你的解决方案。是的,这是MySQL标签下最常见的问题,但是如果你想要一个特定于你需要的答案,请提供适当的DDL和所需的结果。有人能帮我找到我问题的具体答案吗?谢谢Hiral编辑我的帖子。现在看起来好多了。仍然需要帮助。