mysql - 使用 coalesce 获取与帖子相关的项目(评论)数时 SQL 出错

标签 mysql sql

<分区>

我正在处理一个 SQL,我需要在其中获取每个帖子的评论数。我在这里使用三个表来使用用户、帖子和评论。帖子和评论有 postid 作为外键。

当我尝试获取评论数时出现以下错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM posts, users where users.userid = posts.userid and posts.userid = 16 order ' at line 1

我的SQL:

SELECT
  postid,
  post,
  type,
  users.userid,
  CONCAT( firstname, ' ', lastname ) as name,
  COALESCE(
    (SELECT
       COUNT(*)
     FROM comments
     WHERE postid = posts.postid
    ),
  0) AS cnt,
FROM
  posts,
  users
where
  users.userid = posts.userid and
  posts.userid = 16
order by
  postid desc

最佳答案

首先,学习使用正确的 JOIN 语法。 永远不要FROM 子句中使用逗号。

其次,表别名和限定的列名使查询更易于编写和阅读。

SELECT p.postid, p.post, p.type, u.userid,
       CONCAT_WS(' ',  u.firstname, u.lastname ) as name,
       (SELECT COUNT(*) FROM comments c WHERE c.postid = p.postid) AS cnt
FROM posts JOIN
     users u
     ON u.userid = p.userid and p.userid = 16
ORDER BY p.postid desc;

(我在猜测列来自的表。(

另外:

  • COALESCE() 是不必要的。 COUNT(*) 不返回 NULL
  • 多余的逗号是您查询中的具体问题。
  • 如果缺少 firstname,那么您的版本将以空格开头的 nameCONCAT_WS() 解决了这个问题。

关于mysql - 使用 coalesce 获取与帖子相关的项目(评论)数时 SQL 出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37726156/

相关文章:

mysql - 添加列作为已选择的另外 2 个操作的结果

MySql 查询通过 rand() 从 limit 和 order 中获取一定数量的值

sql - 在 T-SQL 中转换字符串 (YYYMMDD)

mysql - 在 MySQL 中使用 join 更新并添加新记录表

sql - "Simple"解密在 100% 的情况下不起作用

mysql - mysql中如何限制变量的增量

mysql - 使用另一个表中的数据更新行

PHP 登录表单无法正常工作

mysql - 对存储在 MYSQL 数据库文本字段中的数字进行排序

mysql - 带有符号或文本的 SQL SELECT 语句