在一个查询中获取视频和类别

b5buobof  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(250)

我有两个数据表,分别是类别(category table)和视频(video table),如下图所示。我正在查询这个图片(查询mysqli测试)以获取视频及其目录。有没有一种方法可以只使用一个查询,但仍然具有与当前查询相同的结果?

<?php
include('config.php');
$page=intval($_REQUEST['page']);
$limit=10;
$start=$page*$limit - $limit;
$video=mysqli_query($conn,"SELECT * FROM video ORDER BY video_id DESC LIMIT $start,$limit");
while($r_video=mysqli_fetch_assoc($video)){
    $cat_info=mysqli_query($conn,"SELECT * FROM category WHERE cat_id IN ({$r_video['video_cat']}) ORDER BY cat_sort ASC");
    while($r_cat=mysqli_fetch_assoc($cat_info)){
        $list_cat.='<a href="/category/'.$r_cat['cat_name'].'.html">'.$r_cat['cat_name'].'</a>,';
    }
    $list_cat=substr($list_cat, 0,-1);
    echo $r_video['video_name'].'<br>'.$list_cat;
    unset($list_cat);

}
?>

分类表
视频表
查询mysqli测试

kyks70gy

kyks70gy1#

您可以像其他人所说的那样加入查询,您面临的问题可能与一个视频可能属于多个类别有关。
在本例中,我将使用一个分析函数来格式化您想要的值。
我目前无法对此进行测试,但在查看文档时,我建议您在加入后尝试group\u concat或concat\ws,以便您可以以最佳方式分组并返回数据。
只需抓取已经建议的查询,并按您想要的方式对它们进行分组,这样您就可以将函数应用于该组并提取值。
希望有帮助。

t8e9dugd

t8e9dugd2#

我建议使用左连接查询。例如,如果要获取类别1“音乐”中的所有视频,可以执行以下操作: SELECT c.cat_name, v.video_name, v.video_url FROM video as v LEFT JOIN category as c ON c.cat_id = v.video_cat WHERE c.cat_id = 1; 这将导致数据集包含: cat_name video_name video_url Music Music Video 1 URL 1 Music Music Video 2 URL 24 工作小提琴:http://sqlfiddle.com/#!9/8008立方厘米/3
SELECT 语句,我们只调用所需的列,使用别名(注意 AS 部分)。我们还基于一个公共列从两个表中收集数据。这就是 ON 命令的一部分。
left join关键字返回左表(表1)中的所有记录,以及右表(表2)中匹配的记录。如果不匹配,则右侧的结果为空。
在php中,您可以使用while语句来迭代所有结果。
希望有帮助。
更新
这更像是获取标签,然后是类别,因为您可能有多个。请参阅:使用sql获取特定标记的所有文章

相关问题