繁体   English   中英

SQL Where IN Order 2子查询

[英]SQL Where IN Order 2 SubQuery

我在SQL中有三个表:

video : ID, TITLE
join_video_clicked : ID_VIDEO, NB_VIEW
join_video_category : ID_VIDEO, ID_CATEGORY

我实际的SQL查询:

SELECT ID,TITLE,THUMB 
FROM video 
WHERE ID 
IN (
      SELECT * FROM 
      (
         SELECT ID_VIDEO 
         FROM join_video_clicked
         WHERE ID_VIDEO 
         IN 
         (
             SELECT ID_VIDEO 
             FROM join_video_category 
             WHERE ID_CATEGORY = 8
         ) 
    ORDER BY CLICKED DESC
  ) AS TEMP
 ) LIMIT 0,24

说明1:

SELECT ID_VIDEO FROM join_video_clicked ORDER BY CLICKED DESC LIMIT 0,24

该查询获得24个ID最多

说明2:

SELECT ID_VIDEO FROM join_video_category WHERE ID_CATEGORY = 8

该查询从自定义类别获取ID

说明3:

SELECT ID,TITLE FROM video WHERE ID IN (!!!SUBQUERY!!!)

该查询使用子查询查找ID和标题

我希望您能帮助我调整查询,以按正确的顺序从自定义类别中获得24个观看次数最多的视频,因为使用此查询,我的自定义类别中有24个观看次数最多的视频,但按DESC顺序却没有。

尝试这个,

SELECT ID,TITLE,THUMB FROM video v JOIN join_video_clicked jvc ON 
ID=jvc.ID_VIDEO JOIN join_video_category jvcat ON ID=jvcat.ID_VIDEO WHERE 
ID_CATEGORY = 8 ORDER BY CLICKED DESC LIMIT 0,24

您可以在两个表之间进行内部联接,以获取该类别中的所有视频,并且在该查询中,您可以按和添加订单数和限制:

SELECT jvclick.id_video
FROM join_video_clicked jvclick
JOIN join_video_category jvcat ON jvcat.id_video = jvclick.id_video
ORDER BY jvclick.clicked DESC
LIMIT 24;

这样的事情应该做到:

select
    vid.id_video,
    vid.title,
    count(click.id_video) cnt
from
    video_clicked click
    join video vid on click.id_video = vid.id_video
    join video_category cat on vid.id_video = cat.id_video
where
    cat.id_category = 1
group by
    vid.id_video,
    vid.title
order by 
    cnt desc
;

完整示例:

use example;

/*
video : ID, TITLE
join_video_clicked : ID_VIDEO, NB_VIEW
join_video_category : ID_VIDEO, ID_CATEGORY
*/

drop table if exists video_clicked;
drop table if exists video_category;
drop table if exists video;
drop table if exists category;

create table category (
    id_category int primary key,
    name varchar(256)
);

create table video (
    id_video int primary key,
    title varchar(256)
);

create table video_category (
    id_video int references video(id),
    id_category int references category(id)

);

create table video_clicked (
    id_video int references video(id),
    nb_view varchar(256)
);

select
    vid.id_video,
    vid.title,
    count(click.id_video) cnt
from
    video_clicked click
    join video vid on click.id_video = vid.id_video
    join video_category cat on vid.id_video = cat.id_video
where
    cat.id_category = 1
group by
    vid.id_video,
    vid.title
order by 
    cnt desc
;
SELECT v.ID,v.TITLE,v.THUMB FROM video v 
JOIN join_video_clicked jvc ON v.ID=jvc.ID_VIDEO
JOIN join_video_category jvcat ON v.ID=jvcat.ID_VIDEO
WHERE jvcat.ID_CATEGORY = 8 ORDER BY jvc.CLICKED DESC LIMIT 24

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM