[英]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.