Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.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_Join - Fatal编程技术网

如何在PHP中处理一对多关系

如何在PHP中处理一对多关系,php,mysql,join,Php,Mysql,Join,如何正确地回显一对多查询结果 对于单表查询结果,我只需在获取每一行后回显它,例如: +---+------+ |ID | title| |1 | a | |2 | b | |3 | c | +---+------+ $smtp->bind_result($ID, $title); while($smtp->fetch()) { \\echo here } 但是在使用了一个带有自然连接的查询(下面的示例

如何正确地回显一对多查询结果

对于单表查询结果,我只需在获取每一行后回显它,例如:

+---+------+
|ID | title|
|1  | a    |
|2  | b    |
|3  | c    |
+---+------+

$smtp->bind_result($ID, $title);
while($smtp->fetch()) {
    \\echo here                        
}
但是在使用了一个带有自然连接的查询(下面的示例)之后,我不知道如何在PHP中将其作为:
“3-c-动作、幻想、军事”

编辑:

让我重新措辞这个问题。使用一对多关系时,如何正确显示“多”表的结果

这就是我目前使用的代码

//connect to database with self made db class object.
$db = new db();
$db = $db->connect();

$smtp = $db->prepare('select ID, title, description, genre from movie NATURAL JOIN movie_genres WHERE date >= ? AND date < ?');
$smtp->bind_param('ss', $seasonStart, $seasonEnd); //variables defined based on current date.
$smtp->execute();
$smtp->bind_result($ID, $title,$description, $genre));
while($smtp->fetch()) {
    echo '
    <div class="upcoming">
        <div id="upcomingPoster" style="background-image: url(images/' . $ID . '.jpeg)">
            <div>
                <a href="">' . $title . '</a>
            </div>
        </div>
        <div class="upcomingInfo">
            <h2>Description</h2>
            <p class="upcomingInfoDescription">' . $description .'</p>
            <div></div>
            <p>' . $genre . '</p>
        </div>
    </div>';
}
//使用自制的db类对象连接到数据库。
$db=新的db();
$db=$db->connect();
$smtp=$db->prepare('select ID,title,description,general from movie NATURAL JOIN movie_generals,其中date>=?和date<?');
$smtp->bind_参数('ss',$seasentstart,$seasentend)//基于当前日期定义的变量。
$smtp->execute();
$smtp->bind_result($ID、$title、$description、$genre));
而($smtp->fetch()){
回声'
描述

。$description

“.$类型。”

'; }

现在当使用它时,我的代码基本上对每一行循环。但我试图在循环到下一部电影之前,将所有类型的电影放在一起

我不确定你想做什么,也不确定你是否想问我

我认为您使用的是PHP-PDO,因此有必要将sql语句的fetch结果存储到另一个变量中。这可能是这样的:

$smtp->bind_result($ID, $title);
while($result = $smtp->fetch()) {
  var_dump($result);
}
因此,现在您应该可以看到获取的行的数据了。

$stmt->bind\u result($ID,$title,$genre);
$stmt->bind_result($ID, $title, $genre);
$movies = array();
while($stmt->fetch()) {
    if (!isset($movies[$ID])){
        $movies[$ID] = array('title'=>$title, 'genres'=>array());
    }
    $movies[$ID]['genres'][] = $genre;
}
foreach ($movies as $ID=>$movie){
    echo $ID . ' - ' . $movie['title'] . ' - ';
    $first = true;
    foreach ($movie['genres'] as $genre){
        if (!first) echo ', ';
        $first = false;
        echo $genre;
    }
    echo '<br />';
}
$movies=array(); 而($stmt->fetch()){ 如果(!isset($movies[$ID])){ $movies[$ID]=array('title'=>$title,'genres'=>array()); } $movies[$ID]['genres'][]=$genre; } foreach($ID=>$movie的电影){ echo$ID.'-'.$movie['title'].'-'; $first=true; foreach($电影[‘流派]]作为$流派){ 如果(!first)回显','; $first=false; 回声$体裁; } 回声“
”; }
您可以分享您尝试过的内容吗?以及您正在使用的查询,同时也请分享。也许您正在搜索array_merge(),通常不是PHP必须处理它,您可以在SQL查询中使用
连接
,MySQL为您提供快速关联的结果。这就是使用DBMS的全部意义所在,这样您就不必自己编写这些东西了。
$stmt->bind_result($ID, $title, $genre);
$movies = array();
while($stmt->fetch()) {
    if (!isset($movies[$ID])){
        $movies[$ID] = array('title'=>$title, 'genres'=>array());
    }
    $movies[$ID]['genres'][] = $genre;
}
foreach ($movies as $ID=>$movie){
    echo $ID . ' - ' . $movie['title'] . ' - ';
    $first = true;
    foreach ($movie['genres'] as $genre){
        if (!first) echo ', ';
        $first = false;
        echo $genre;
    }
    echo '<br />';
}