Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据字段的值从不同的表中获取值_Php_Mysql_Subquery_Case - Fatal编程技术网

Php 根据字段的值从不同的表中获取值

Php 根据字段的值从不同的表中获取值,php,mysql,subquery,case,Php,Mysql,Subquery,Case,在我的项目中,我有两种类型的视频:免费视频和特色视频。我正在将免费视频的详细信息保存在一个表channel_videos中,如下所示: id videotitle video thumbnail added_on 我正在将特色视频的详细信息保存在表格视频中 当用户观看视频时,观看的视频详细信息以及观看的用户详细信息将存储在另一个表viewedmovies中 在此表中,如果字段videotype的值为0(免费视频),则查询表channel_videos,如果videotype为

在我的项目中,我有两种类型的视频:免费视频和特色视频。我正在将免费视频的详细信息保存在一个表channel_videos中,如下所示:

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