当前位置: 首页 > 知识库问答 >
问题:

如何在多对多关系中只重复行一次

易成双
2023-03-14

我正在php上研究多对多关系,我有3个表,包括电影名称和电影id的movie表genre表包括类型和类型id的movie_genre表包括电影id和类型id的movie_genre表
genre表有这些值

(1 ,'action'),
(2 ,'comedy'),
(3 ,'drama'),
(4 ,'mystery');

我使用下面的代码来获取数据

 $query = " SELECT movie_name,movie_id,genre FROM movies
    JOIN movie_genre ON movies.movie_id = movie_genre.movie_id
    JOIN genre ON movie_genre.genre_id = genre.genre_id
    WHERE movie.movie_id = ?";


    $stmt = mysqli_prepare($conn, $query);
    $stmt->bind_param('i', $id);
    $stmt->execute();
    $result = $stmt->get_result();
    if(mysqli_num_rows($result) > 0 ){
    while ($row = mysqli_fetch_assoc($result)) {

    echo ' movie_id: '.$row["movie_id"].' movie name:'.$row["movie_name"].'
    Genres:' .$row["genre"]

        }}

但结果将类似于
movie_id movie_name genre[1]
movie_id movie_name genre[2]
movie_id movie_name genre[3]
示例

movie_id:55 movie name: titanic genre : action 

movie_id:55 movie name: titanic genre : drama

movie_id:55 movie name: titanic genre : romance

我想要的结果是

movie_id:55 movie name: titanic genre : action drama romance

我确实尝试过使用Limit1,但结果显示的只是第一个流派

共有1个答案

胡泓
2023-03-14

我需要做一个循环,只是为流派,我不能测试,所以这是把我想象的工作,但它将是沿着这些路线的东西,这里可能有语法错误

$query = " SELECT movie_name,movie_id,genre FROM movies
    JOIN movie_genre ON movies.movie_id = movie_genre.movie_id
    JOIN genre ON movie_genre.genre_id = genre.genre_id
    WHERE movie.movie_id = ?";    

    $stmt = mysqli_prepare($conn, $query);
    $stmt->bind_param('i', $id);
    $stmt->execute();
    $result = $stmt->get_result();
    if(mysqli_num_rows($result) > 0 ){

    // if it's greater than zero, great, we have at least 1 movie.
    // but if it's greater than 1, then we know we have more than 1 genre

    while ($row = mysqli_fetch_assoc($result)) {
    echo 'movie_id:'.$row["movie_id"].'movie name:'.$row["movie_name"];
    break; // so it only runs through this loop once, instead of using limit
    }//end while

    if(mysqli_num_rows($result) > 1 ){
    // more than 1 genre so loop and print out just genres
    while ($row = mysqli_fetch_assoc($result)) {    
      echo $row["genre"];    
    }//end while
    }//end if more than 1 genre
    }//end if
 类似资料:
  • 问题内容: 在关系数据库中,我有一个用户表,一个类别表和一个用户类别表,它们之间存在多对多关系。在Redis中具有这种结构的更好形式是什么? 问题答案: 使用Redis,关系通常由集合表示。一组可用于表示单向关系,因此每个对象需要一组以表示多对多关系。 尝试将关系数据库模型与Redis数据结构进行比较是毫无用处的。使用Redis,所有内容均以非规范化方式存储。 例: 一旦有了此数据结构,就可以使用

  • 问题内容: 我相信标题是不言而喻的。如何在PostgreSQL中创建表结构以建立多对多关系。 我的例子: 问题答案: SQL DDL(数据定义语言)语句如下所示: 我强烈建议您这样做,因为产品名称几乎不是唯一的(不是很好的“自然键”)。此外,强制使用唯一性并在外键中引用该列通常比使用存储为或的字符串便宜(4字节(甚至8字节))。 不要使用基本数据类型的名称作为 标识符 。尽管这是可能的,但这是不好

  • 问题内容: 我正在制作一个具有多对多关系的SQLite数据库,并使用以下代码将其分解为两个一对多的关系 错误: 有谁知道我该如何解决这个错误? 问题答案: 查看文档; 它向您表明,如果您在字段定义本身上指定了外键,则不应使用关键字本身。此外,正如 CL 指出的那样,您使用了太多逗号 。 ,即使单独指定约束,外键名称也不应放在括号中。 该语句可以满足您的要求: 还要注意,如果MODULEID是表MO

  • 我对MongoDB中的多对多关系实现有一个特定的问题。 我收集了歌曲和艺术家的作品(数百万份文档)。在这里,这首歌可以被许多艺术家演唱,一个艺术家可以唱许多首歌。所以我在两个集合中都遵循了文档引用的方法。像这样... 1.歌曲集:- 2.艺术家收藏:- 但这里的问题是,在删除艺术家的同时,我必须从歌曲所有文档中的艺术家数组中删除一个艺术家,如果该文档中有艺术家,反之亦然。这会导致原子性问题。我如何

  • 问题内容: 我现在正在定义Django模型,我意识到模型字段类型中没有。我确定有办法做到这一点,所以我不确定我缺少什么。我基本上有这样的事情: 在这种情况下,每个可以有多个,但这种关系应该是单向的,因为我不需要从知道其拥有它本身,因为我可能有许多不同的对象自身的情况下,如为例: 我将用模型中的什么替换(不存在)以表示这种关系?我来自Hibernate / JPA,在这里声明一对多关系非常简单: 如