我有一个非常困惑的查询字符串,此时看起来像这样:
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/