相关疑难解决方法(0)

MySQL和GROUP_CONCAT()的最大长度

GROUP_CONCAT()在MySQL查询中使用将多行转换为单个字符串.但是,此函数的结果的最大长度是1024字符.

我非常清楚我可以改变参数group_concat_max_len来增加这个限制:

SET SESSION group_concat_max_len = 1000000;
Run Code Online (Sandbox Code Playgroud)

但是,在我正在使用的服务器上,我无法更改任何参数.不是通过使用前面的查询而是通过编辑任何配置文件.

所以我的问题是:有没有其他方法可以将多行查询的输出转换为单个字符串?

mysql group-concat

244
推荐指数
6
解决办法
23万
查看次数

MySQL之前按顺序排序

这里有很多类似的问题,但我认为没有充分回答这个问题.

我会从当前最流行的问题继续,并使用他们的例子,如果这没关系.

此实例中的任务是获取数据库中每个作者的最新帖子.

示例查询产生不可用的结果,因为它并不总是返回的最新帖子.

SELECT wp_posts.* FROM wp_posts
    WHERE wp_posts.post_status='publish'
    AND wp_posts.post_type='post'
    GROUP BY wp_posts.post_author           
    ORDER BY wp_posts.post_date DESC
Run Code Online (Sandbox Code Playgroud)

目前接受的答案是

SELECT
    wp_posts.*
FROM wp_posts
WHERE
    wp_posts.post_status='publish'
    AND wp_posts.post_type='post'
GROUP BY wp_posts.post_author
HAVING wp_posts.post_date = MAX(wp_posts.post_date) <- ONLY THE LAST POST FOR EACH AUTHOR
ORDER BY wp_posts.post_date DESC
Run Code Online (Sandbox Code Playgroud)

不幸的是,这个答案简单明了,并且在很多情况下产生的结果不如原始查询那么稳定.

我最好的解决方案是使用表单的子查询

SELECT wp_posts.* FROM 
(
    SELECT * 
    FROM wp_posts
    ORDER BY wp_posts.post_date DESC
) AS wp_posts
WHERE wp_posts.post_status='publish'
AND wp_posts.post_type='post'
GROUP BY wp_posts.post_author 
Run Code Online (Sandbox Code Playgroud)

我的问题是一个简单的问题: 无论如何在分组之前订购行而不诉诸子查询?

编辑:这个问题是另一个问题的延续,我的情况细节略有不同.您可以(并且应该)假设还有一个wp_posts.id,它是该特定帖子的唯一标识符.

mysql group-by sql-order-by

228
推荐指数
5
解决办法
31万
查看次数

MySQL - 使用GROUP BY和DESC

在我的SQL查询中,我使用GROUP BYORDER BY子句选择数据.该表numbers在多行中具有相同的行,每行具有不同的时间.所以我想我想要应用GROUP BY子句.

但是在结果中返回最旧的时间与数字,但我需要最近的时间.

SELECT * FROM TABLE GROUP BY (numbers) ORDER BY time DESC
Run Code Online (Sandbox Code Playgroud)

查询看起来好像应首先应用GROUP BY然后ORDER BY ...但结果似乎不会以这种方式工作.

有没有什么办法解决这一问题?

mysql sql group-by sql-order-by

13
推荐指数
2
解决办法
5万
查看次数

MYSQL查询:最新时间戳+过去30分钟的唯一值

我需要从mysql表中检索具有唯一值的最新行.简单的表格布局是时间戳(now())和用户名列.该表每秒获取几次新数据,我需要用户名唯一的最新行.

SELECT MAX(timestamp) as timestamp, username 
    FROM bla 
    WHERE timestamp < (now() - interval 30 minute) 
    GROUP BY username 
    ORDER BY timestamp DESC 
Run Code Online (Sandbox Code Playgroud)

看来这个查询没有返回最新值,可能是因为该组正在做一些我不想要的事情......

mysql

5
推荐指数
2
解决办法
5287
查看次数

MySQL:ORDER BY FIELD/GROUP BY

我的问题是关于MySQL优化和良好实践.

我必须得到带有订单偏好的翻译文本列表:如果我找不到英文文本,我想使用法文文本,如果它不存在,我想用西班牙语.

换句话说,我有:

id  lang text
1   fr   text_FR
1   en   text_EN
1   es   text_ES
2   fr   text_FR2
3   fr   text_FR3
3   es   text_ES3
Run Code Online (Sandbox Code Playgroud)

而且我要:

id  lang text
1   en   text_EN
2   fr   text_FR2
3   fr   text_FR3
Run Code Online (Sandbox Code Playgroud)

所以我读了一些像这样,这个,那个那个的主题.好.我试过这个:

SELECT text FROM (
    SELECT id, text 
    FROM translation 
    ORDER BY FIELD(lang, 'en', 'fr', 'es')
) tt GROUP BY tt.id;
Run Code Online (Sandbox Code Playgroud)

但是,当我解释这个查询时,我可以读到:

id  select_type table   partitions  type    possible_keys   key key_len ref rows    Extra
1   PRIMARY …
Run Code Online (Sandbox Code Playgroud)

mysql optimization

5
推荐指数
1
解决办法
577
查看次数

标签 统计

mysql ×5

group-by ×2

sql-order-by ×2

group-concat ×1

optimization ×1

sql ×1