【问题标题】:How to JOIN 2 tables in MYSQL with same ID on multiple rows如何在 MYSQL 中在多行上使用相同的 ID 加入 2 个表
【发布时间】:2013-08-07 12:35:29
【问题描述】:

我很难弄清楚这一点。希望有人能帮我解决这个问题。


例如。我有一个视频网站,在这个视频网站上我可以提交视频帖子,其中包含在这个视频中播放的人的名字。但我不想只添加 1 个名称,它可以更多。所以我会有一个 video.php 页面,在这个页面中我可以提交视频的视频标题以及在其中播放的人的姓名。

表格:发布

    -------------------------------------------
  -- video_id ---- video_name ----  video_cast -- 
    -------------------------------------------
       1              Vid-1           1
       2              Vid-2           2
       3              Vid-2           2   

表:演员表

    -----------------------------------------
  -- cast_id ----  cast_name ----  cast_video -- 
    -----------------------------------------
       1              John            1
       2              Erik            2
       3              Ela             2

现在,如果我在我的主页上看到这篇新帖子。如果我点击它。它将在标头中发送 video_id 信息,以便我可以从 video.php 中获取它。

页面:video.php

<?php   

    $id = $_GET['id'];
    $result = mysql_query
    ("
        SELECT * 
        FROM post 
        LEFT JOIN cast 
        ON post.video_cast = cast.cast_video
        WHERE video_id='$id' 
    ");

    while($row = mysql_fetch_array($result)){
        echo ' 
                   <h1>'.$row['video_name'].'</h1> 
                   starring: '.$row['cast_name'].
                 ';                   
    }
?>

现在我如何才能显示 video_name 以及与视频相关联的所有 cast_name。我使用的 JOIN 代码只能从表中显示 1 个名称。有人知道我如何获取其他剩余的名称吗?

【问题讨论】:

    标签: php mysql join row


    【解决方案1】:

    你可以用group_concat()在一行中列出名字

     SELECT video_name, group_concat(cast_name) cast
     FROM post 
     LEFT JOIN cast ON post.video_cast = cast.cast_video
     WHERE video_id='$id' 
     group by video_name
    

    【讨论】:

    • 你能解释一下这个 group_concat 吗?我现在就去试试。
    • 按列分组就可以使用。分组列的唯一值的所有数据可以放在一个逗号列表中。请参阅我更新的答案中的链接。
    • 它不起作用,你看我在表格中也有其他东西,比如视频描述 (video_desc) 和 video_src,其中包含视频的 iframe 嵌入,我如何让这些也显示?
    • 请在您的问题中准确说明您希望返回哪些数据以及如何返回。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-11
    • 2014-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    相关资源
    最近更新 更多