【问题标题】:INNER JOIN SQL ORDER BY NOT WORKINGINNER JOIN SQL ORDER BY NOT WORKING
【发布时间】:2017-12-07 16:08:34
【问题描述】:

工作中!

SELECT s.*, COUNT(rs.id_segreto) as tot
FROM Segreti s INNER JOIN
     Reazioni_Segreti rs
     ON s.id = rs.id_segreto
WHERE rs.tipo_reazione = 'mi_piace'
GROUP BY s.id
ORDER BY tot DESC
LIMIT 10;

但它只打印了 1 行。

$rs_result = mysql_query($sql);
while ($row = mysql_fetch_array($rs_result, MYSQL_ASSOC)) {
echo $row['id']."<br>";
}

为什么会这样?我错了什么?

【问题讨论】:

  • 在这里参考这个答案:stackoverflow.com/questions/14673338/…
  • 你能给我们一些来自这两个表的样本数据吗? Segreti 中的列名是什么?由于您使用的是聚合函数 (COUNT()),因此您可能需要在非聚合列上使用 GROUP BY
  • 如果您要有意义地使用聚合函数,您的查询中需要一个GROUP BY 子句。如果您使用的是 MySQL 5.7.5+,我很惊讶您没有收到错误消息告诉您。您可能遇到MySQL Group By Extensions 猜测如何对您的数据进行分组。

标签: mysql sql


【解决方案1】:

这是 MySQL 允许的语法,但 SQL 标准不允许 - 其他数据库也不允许。 SELECT 中有大量未分组的字段,但 COUNT() 将其转换为聚合查询。

没有group by,这样的查询总是只返回一行。

我还建议使用表别名:

SELECT s.*, COUNT(rs.id_segreto) as tot
FROM Segreti s INNER JOIN
     Reazioni_Segreti rs
     ON s.id = rs.id_segreto
WHERE rs.tipo_reazione = 'mi_piace'
GROUP BY s.id
ORDER BY tot DESC
LIMIT 10;

请注意,即使在 ANSI 下,GROUP BY 中也允许使用 s.id(而不是列出所有列),前提是 id 在表中被定义为唯一。

【讨论】:

    猜你喜欢
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2013-02-09
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多