Php 根据字段的值从不同的表中获取值
在我的项目中,我有两种类型的视频:免费视频和特色视频。我正在将免费视频的详细信息保存在一个表channel_videos中,如下所示:Php 根据字段的值从不同的表中获取值,php,mysql,subquery,case,Php,Mysql,Subquery,Case,在我的项目中,我有两种类型的视频:免费视频和特色视频。我正在将免费视频的详细信息保存在一个表channel_videos中,如下所示: id videotitle video thumbnail added_on 我正在将特色视频的详细信息保存在表格视频中 当用户观看视频时,观看的视频详细信息以及观看的用户详细信息将存储在另一个表viewedmovies中 在此表中,如果字段videotype的值为0(免费视频),则查询表channel_videos,如果videotype为
id videotitle video thumbnail added_on
我正在将特色视频的详细信息保存在表格视频中
当用户观看视频时,观看的视频详细信息以及观看的用户详细信息将存储在另一个表viewedmovies中
在此表中,如果字段videotype的值为0(免费视频),则查询表channel_videos,如果videotype为1(特色视频),则查询表videos
以上是我使用的查询。但这只从视频表中获取结果
如何在单个查询中完成此操作?此外,我希望将结果分组到viewedmovies表的movie_id、videotype和user_id字段中
提前感谢。我还没有测试过它,但类似的东西应该可以工作:
SELECT viewedmovies.id, viewedmovies.watched_on
, video.title, video.videothumbnail, video.views, video.likes, video.length, video.videoid
, channel_videos.videotitle, channel_videos.thumbnail, channel_videos.id
FROM viewedmovies
LEFT JOIN video
ON (viewedmovies.movie_id=video.videoid AND viewedmovies.user_id=1 AND viewedmovies.videotype=1)
LEFT JOIN channel_videos
ON (viewedmovies.movie_id=channel_videos.id AND viewedmovies.user_id=1 AND viewedmovies.videotype=0)
GROUP BY viewedmovies.user_id, viewedmovies.movie_id, viewedmovies.videotype
ORDER BY watched_on desc
LIMIT 6
虽然总是有一些SQL魔力可以满足您的需求,但我认为您的数据库结构存在问题。由于免费视频和特色视频的信息是相同的,如果你把它们放在同一张表中,事情会变得容易得多。你只需要添加一个“is_free”列。
id user_id movie_id videotype watched_on
select viewedmovies.id,viewedmovies.watched_on,video.title,video.videothumbnail,video.views,
video.likes,video.length,video.videoid from viewedmovies INNER JOIN video ON viewedmovies.movie_id=video.videoid
and viewedmovies.user_id=1 group by viewedmovies.user_id,viewedmovies.movie_id,viewedmovies.videotype order by watched_on desc LIMIT 6
SELECT viewedmovies.id, viewedmovies.watched_on
, video.title, video.videothumbnail, video.views, video.likes, video.length, video.videoid
, channel_videos.videotitle, channel_videos.thumbnail, channel_videos.id
FROM viewedmovies
LEFT JOIN video
ON (viewedmovies.movie_id=video.videoid AND viewedmovies.user_id=1 AND viewedmovies.videotype=1)
LEFT JOIN channel_videos
ON (viewedmovies.movie_id=channel_videos.id AND viewedmovies.user_id=1 AND viewedmovies.videotype=0)
GROUP BY viewedmovies.user_id, viewedmovies.movie_id, viewedmovies.videotype
ORDER BY watched_on desc
LIMIT 6