来自同一张桌子的多个外键

时间:2017-06-20 15:26:50

标签: php mysql inner-join

我对此MySQL Statment有疑问。所以基本上我有一个叫做游戏的桌子,我想要 在我的网站上显示此表格。桌面游戏有像developer_id这样的外键, publisher_id,categorie_id,platform1_id,platform2_id,platform3_id,platform4_id,platform5_id。 我有5个平台,因为在Table平台上我有5条记录(PC,PS4,XB1,SWITCH,MOBILE)。 (如果你们知道这些平台的任何更好,更容易的解决方案请告诉我。) 所以现在我的网站上的输出有效,但是例如显示它显示的开发者名称 它的ID。我知道我必须INNER JOIN他们,我可能会INNER JOIN所有的外键,但是 平台一。因为如果你从一张桌子里拿出多于一个的FK,我不知道如何INNER JOIN。

如果您需要更多信息,请告诉我。我还将包括我的数据库和我的PHP代码的图片,其中我从桌面游戏中选择。

$query = "SELECT * FROM games WHERE id = $id";
$result = mysqli_query($link, $query) or die(mysqli_error($link));

while ($row = mysqli_fetch_array($result)) {
    echo '<tr>';
    echo '<td>'.$row['developer_id'].'</td>';
    echo '<td>'.$row['publisher_id'].'</td>';
    echo '<td>'.$row['categorie_id'].'</td>';
    echo '<td>'.$row['platform1_id'].'</td>';
    echo '<td>'.$row['platform2_id'].'</td>';
    echo '<td>'.$row['platform3_id'].'</td>';
    echo '<td>'.$row['platform4_id'].'</td>';
    echo '<td>'.$row['platform5_id'].'</td>';
    echo '<td>'.$row['game_name'].'</td>';
    echo '<td>'.$row['relese_date'].'</td>';
    $intro = $row['introduction'];
    $desc = $row['description'];
    echo '<td>'.$row['rating'].'</td>';
    echo '</tr>'; 
}

Picture of my DataBase

1 个答案:

答案 0 :(得分:0)

SELECT games.game_name, games.relese_date, games.introduction, games.rating, games.description, dev.name as developer, pub.name as publisher, (SELECT * FROM platforms WHERE platforms.id in (games.platform1_id,games.platform2_id,games.platform3_id,games.platform4_id,games.platform5_id)) as plats 
FROM games 
    INNER JOIN developers AS dev ON dev.id = games.developer_id 
    INNER JOIN publishers AS pub ON pub.id = games.publisher_id 
WHERE games.id = $id

请记住,平台将作为属性板下的集合列出,并且每个项都将是属性对象。

E.X。

  return object=>
      developer_id
      publisher_id
      categorie_id
      plats => [
        platform1_id=>name, 
        platform2_id=>name, 
        platform3_id=>name, 
        platform4_id=>name, 
        platform5_id=>name
      ]
      game_name
      relese_date
      introduction
      description
      rating