mysql - phpmyadmin 排序依据(喜欢在 x 时间内完成-不喜欢在 x 时间内完成)

标签 mysql sql

我想知道是否有一种方法可以创建一个 sql 命令,该命令可以按(喜欢减去不喜欢)对在某个时间范围内完成的行进行排序。下面的例子展示了当我只有喜欢时我是如何做到这一点的(它有效),但是当考虑到不喜欢时它对我来说变得复杂了。

SELECT count(likes.lid) as 'amount', posts.* FROM likes 
join posts on posts.pid = likes.pid
WHERE likes.DateLiked >= DATE_ADD(CURRENT_DATE, INTERVAL -3 DAY)
group by likes.pid order by amount  DESC;

我目前有三个表:

CREATE TABLE posts (
    pid int(11) AUTO_INCREMENT PRIMARY KEY,
    uid int(11) not null,
    Content text not null,
    Category varchar(100) not null,
    Subject varchar(100) not null,
    DatePublished datetime not null,
    TypeData VARCHAR(100) NOT NULL DEFAULT 'none',
    Data VARCHAR(500) NOT NULL
);

CREATE TABLE likes (
    lid int(12) AUTO_INCREMENT PRIMARY KEY,
    uid int(11) NOT NULL,
    Username varchar(200) NOT NULL,
    pid int(11) NOT NULL,
    DateLiked DateTime NOT NULL,
    ipConnect varchar(200) NOT NULL

)

CREATE TABLE dislikes (
    lid int(12) AUTO_INCREMENT PRIMARY KEY,
    uid int(11) NOT NULL,
    Username varchar(200) NOT NULL,
    pid int(11) NOT NULL,
    DateLiked DateTime NOT NULL,
    ipConnect varchar(200) NOT NULL
);

我正在寻找一个命令,它可以在特定时间范围内按最高评分(喜欢-不喜欢)对帖子进行排序(即,如果有人在 2 天前喜欢它,但一年前不算)。

感谢任何帮助, 祝你有美好的一天。

最佳答案

先聚合,后加入:

select
  coalesce(l.cnt, 0) - coalesce(dl.cnt, 0) as likes,
  p.*
from posts p
left join
(
  select pid, count(*) as cnt
  from likes
  where dateliked >= date_add(current_date, interval -3 day)
  group by pid
) l on l.pid = p.pid
left join
(
  select pid, count(*) as cnt
  from dislikes
  where dateliked >= date_add(current_date, interval -3 day)
  group by pid
) dl on dl.pid = p.pid
order by coalesce(l.cnt, 0) - coalesce(dl.cnt, 0) desc;

关于mysql - phpmyadmin 排序依据(喜欢在 x 时间内完成-不喜欢在 x 时间内完成),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44547566/

相关文章:

mysql - 有没有办法将规范化数据选回一个结果集中

mysql - 有没有办法从表中删除有关系的记录?

javascript - OnClick 按钮从数据库获取并实时显示在输入字段上

MySQL触发器在插入之前修改col

mysql - SQL查询以从重复行中获取结果

sql - 中止来自 SQLite 触发器的以下语句

sql - 在 SSIS 2012 的 OLE DB 源中使用动态 SQL

php - Mysql - Woocommerce 交叉销售和向上销售单一产品

mysql - 计算不同的和重复的mysql

mysql - 纯mysql如何统计多行的列值?