纵有疾风起
人生不言弃

mysql联表查询去掉主表里不符合子表数据的

有一个需求:

n_book  是所有参与限时免费的数据,free_days字段是免费天数,前端要显示具体的每个人截止时间,截止时间是从这个人开始阅读这本书开始算,如果没有阅读过,就按当前服务器时间加上天数然后转换成截止时间。

当一个人阅读了这本书,数据则会写入到n_free_days里,字段如下:

id,add_time,end_time,user_id,bid(书id)

之前用not in 试过,联表后把已截止的过滤掉,数据不准确,

网上查了一下,建议都用not exists,效果确实对的,

{}内的代表变量

SELECT b.id,b.free_days,b.img,b.title,b.content,b.state,b.author,t.name FROM `n_book` AS b left join n_type as t on t.id = b.tid  WHERE {$w}  b.closed = 0 AND b.del_time = 0 AND b.free_days > 0 AND NOT EXISTS (SELECT f.end_time FROM n_free_days AS f WHERE f.user_id = {$uid} AND f.bid = b.id AND f.end_time< {$time} ) order by {$orderby} {$direction} limit {$start},{$endpage}

未经允许不得转载:起风网 » mysql联表查询去掉主表里不符合子表数据的
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录