如何从5个不同的表中选择准确的值

时间:2017-03-05 20:30:20

标签: mysql sql

大家好,这是我在stackoverflow中的第一个问题,所以我会很清楚,我对php很新,所以请放轻松。 对,所以我想要做的是我有5个表,其中已经设置了关系  并且我试图使用游戏ID注释显示相关的类别和平台,该类别有自己的表格,因此平台然后还有另外两个表格,它们具有游戏ID和猫ID,并且相同我在游戏桌上的平台和游戏以及领域是: id - >用于游戏ID name - >代表游戏名称 细节和图像。 并在game_cat中: g_id和cat_id 然后是表格,其中包含具有名称和ID的类别 和平台相同。这些是我试图从中选择的表格 enter image description here 我的sql是:

SELECT games.*,
    game_cat.*,
    category.*
FROM games,
    game_cat,
    category
WHERE games.id='game_cat.g_id'
AND game_cat.g_id='game_cat.cat_id'
AND game_cat.cat_id='category.id'

但它不适用于phpmyadmin sql所以我做了一些研究,并且在sql中有一些我不熟悉的加入。 任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

不要使用单引号作为列名(当需要最终使用backtics时) 如果你总是匹配列,则使用内连接(否则你离开了连接),并且可以使用别名来进行压缩查询 (我还添加了最后两个表...希望相关的列名称是正确的)

SELECT g.*,gc.*,c.* , gp.*, p.*
FROM games g
INNER JOIN  game_cat gc on  g.id = gc.g_id
INNER JOIN  category c on gc.cat_id=c.id
INNER JOIN  game_platform gp on  g.id = gp.g_id
INNER JOIN  platform p on gp.paltform_id=p.id

答案 1 :(得分:-1)

您需要根据表之间的外键关系在表之间加入(如果您不知道这是什么,请继续阅读它!)。像这样的东西(我不知道哪些列代表外键,所以这样做):

SELECT games.*,
    game_cat.*,
    category.*
FROM games g
  INNER JOIN game_cat gc on (g.game_id = gc.g_id)
  INNER JOIN category c on (gc.cat_id = c.cat_id)
WHERE games.id='game_cat.g_id'
AND game_cat.g_id='game_cat.cat_id'
AND game_cat.cat_id='category.id';

这似乎是gamescategory之间多对多关系的标准实现 - 这是正确的吗?