【问题标题】:Associate two elements of different tables in the db关联数据库中不同表的两个元素
【发布时间】:2014-04-24 18:16:38
【问题描述】:

我不知道要解释多少,所以我将给出我的情况,以便您更好地理解我。

我有一个游戏网页。在我的数据库中,我有两张表:一张是我的游戏(包含 id、name、description、category (这是一个数字,而不是字符串) 等列.),另一个是我的类别(带有 id 和名称)。
当我上传游戏时,我没有将类别名称分配到类别列中,而是分配了一个数字,即类别表中对应的数字(我使用这样的选择选项:

<option value="'.$row['id'].'">'.$row['name'].'</option>

(这是在一个 select 标记内(在一个表单内)和一个 foreach 语句,因此它显示了所有选项。

所以现在,我想要的是,当我使用“SELECT * FROM games”从数据库中捕获游戏时,如果我调用类别元素,而不是获取类别的 id,则将 id 分配给类别名称...我不知道要解释多少,但我希望你能理解我。

那么,我应该使用什么?

【问题讨论】:

  • 查找join。您必须在查询中连接这两个表。

标签: php mysql


【解决方案1】:

您可以只使用“INNER JOIN 或 JOIN”来通过连接两个表来获取结果。

`SELECT g.*,c.*
 FROM games g
 INNER JOIN categories c on c.categoryid = g.categoryid;`

这将只为您提供相关类别。 但是如果你使用“左连接”,它会给你游戏中的一切(http://www.sitepoint.com/understanding-sql-joins-mysql-database/

`SELECT g.*,c.*
 FROM games g
 LEFT JOIN categories c on c.categoryid = g.categoryid;`

【讨论】:

  • 感谢您的指导!我去看看,如果有问题,我会告诉你的! ;)
  • 好的,我已经使用了这个代码 'SELECT g.*, c.* FROM games g LEFT JOIN categories c ON c.id = g.category ORDER BY name',但是现在,如果我想用 foreach 语句调用它,我该怎么做?我的意思是 foreach ($result as $row) 然后像 $row['g.name'] 一样调用它?
  • 您可以在查询中使用 select g.name as name, g.categoryid as cid,c.categoryname as catName(这称为别名,如果您使用相同的名称,可以将其用于任何列如 g.categoryname 作为 catName 和 c.categoryname 作为 catName 然后它假定第二个别名为 catName2 )和 foreach $row['name'] 和 $row['cid']
【解决方案2】:

您可以使用LEFT JOIN 来提取类别名称。示例:

SELECT 
  g.id g_id,
  g.name g_name,
  g.desc g_desc,
  c.name c_name
FROM games g
LEFT JOIN
  categories c
    ON c.id = g.category

这是一个示例,您需要选择正确的列并分配一个唯一的别名。

【讨论】:

  • 哦,谢谢!但实际上,g.id g_id, g.name g_name 的那个东西我不是很懂……我要怎么用呢?
  • 例如,g.id 将是games 中的id 列。您需要在此处指定自己的列。
  • 哦,不好意思……另外,g_idg.id别名,以后可以参考。如果您要查询游戏和类别 ID(假设两个表中都存在 id 列),则别名很有用。如果您没有分配别名,那么结果集中的 id 列将是最后一个查询的 id(因此每次选择它都会被覆盖)。
【解决方案3】:

我想你想加入这些表,这样你就可以从同一个查询中获取类别名称。

你可以这样做:

$result = mysql_query("SELECT * FROM games, category WHERE games.category = categoyry.id) or die(mysql_error());
while($row = mysql_fetch_array($result))
{
    echo $row['games.name'].' '.$row['category.name'];
}

【讨论】:

  • 哦,对不起,我忘了提到我使用 PDO 进行连接!
  • @peregraum 只需检查如何使用 pdo 进行连接,然后您就会成功;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多