Mysql 在 1 个表上选择和排序

标签 mysql sql

我是 MySQL 新手。我有一个具有以下结构和数据的表:

CREATE TABLE posts
    (`id` int, `title` varchar(255), `post_id` int, `type` varchar(255) )
;

INSERT INTO posts
    (`id`, `title`, `post_id`, `type`)
VALUES
    (1, 'Hello', NULL, 'post'),
    (2, 'This is title', NULL, 'post'),
    (3, NULL, 1, 'like'),
    (4, NULL, 1, 'like'),
    (5, NULL, 2, 'like')
;

我想像这样选择和排序帖子:

  1. 你好 => 2(喜欢)
  2. 这是标题 => 1(赞)

最佳答案

您可以执行自连接,并根据喜欢的数量进行排序:

SELECT   id, cnt
FROM     (SELECT id, title
          FROM   posts
          WHERE  title IS NOT NULL) titles
JOIN     (SELECT   post_id, COUNT(*) AS cnt
          FROM     posts
          WHERE    type = 'like'
          GROUP BY post_id) likes ON titles.id = likes.post_id
ORDER BY cnt DESC

关于Mysql 在 1 个表上选择和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26582508/

相关文章:

php - 返回奇怪的 POST 数据垃圾

mysql - 过滤产品的某一类别,但带上过滤后产品的所有类别

SQL,查找另一个表中不存在的所有条目

sql - 如何在远程服务器上创建到本地PC的链接服务器

sql - 违反主键约束--firebird SQL

mysql - SQL检查线程时间戳是否比JOIN语句中的回复时间戳更新

带通配符的 MySql Where 子句

java - mysql命令应该完成哪些流程,Java应该完成哪些流程?

php - 带有 session 变量的查询语句

php - Codeigniter 远程数据库连接问题