MySql、选择、左连接、分组依据、限制..以及我必须在哪里下订单?

标签 mysql database sql-order-by

我有一个非常困惑的查询字符串,此时看起来像这样:

SELECT SQL_CALC_FOUND_ROWS m.*,
(
  SELECT count(1) FROM votazioni_messaggi v
  WHERE v.idMeggaggio=m.ID
) AS Votato,

AVG(voto) AS votazioneMedia, 
n.nomeUtente,
FROM messages m 
LEFT JOIN votazioni_messaggi v ON v.idMessaggio = m.ID 
LEFT JOIN utenti n ON a.idUtente=n.ID
WHERE n.idUser='$idUser' AND m.Genre IN('animal', 'love') 
GROUP BY m.ID,  
LIMIT $partenza, 20

换句话说,我必须一次选择 20 条具有“动物”和“爱情”等类型的消息,为每条消息检索有关用户的信息并计算投票平均值。通过计数和分组,我可以知道用户是否已经对消息进行了投票。

现在我必须按插入时间为 ORDER 消息设置最后一个子句(我在 messages.InsertionTime 表中拥有此数据)。

该子句应该是ORDER BY messages.InsertionTime,但我如何知道我必须将其放置在哪个确切点?

最佳答案

试试这个:

SELECT SQL_CALC_FOUND_ROWS m.*,
       (SELECT count(1) FROM votazioni_messaggi v
        WHERE v.idMeggaggio=m.ID
       ) AS Votato,
       AVG(voto) AS votazioneMedia, 
       n.nomeUtente,
FROM messages m 
LEFT JOIN votazioni_messaggi v ON v.idMessaggio = m.ID 
LEFT JOIN utenti n ON a.idUtente=n.ID
WHERE n.idUser='$idUser' AND m.Genre IN ('animal', 'love') 
GROUP BY m.ID
ORDER BY m.InsertionTime 
LIMIT $partenza, 20;

您至少遇到了两个问题。其中之一是 group by 末尾的逗号。另一种是使用表名称而不是表别名。

关于MySql、选择、左连接、分组依据、限制..以及我必须在哪里下订单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18604243/

相关文章:

SQL Server 对奇数 ASC 和偶数 DESC 排序

mysql - 有没有更有效的方法来编写这个 MySQL 查询?

c# - Convert.ToString 返回 `System.Byte[]` 而不是实际数据,因为 GROUP_CONCAT 返回 BLOB

mysql - Perl 使用另一个数据库中的值更新 Oracle 数据库

mysql - 返回尚未关注(或查看)的最受关注用户

mongodb - Mongo按数组长度排序

php - 根据 id 变量删除帖子 - 不同的用户 session

mysql - 行到列的转换

sql-server - 如何在 SQL Server 中将 bool 字段从可为 null 的列中删除?

database - 我是否正确规范了这张表