【问题标题】:Show Name Instead of ID from Different Table显示名称而不是来自不同表的 ID
【发布时间】:2016-03-09 16:07:33
【问题描述】:

我有 2 张桌子:

  • Category 主键 ID 和列 Name
  • Employee 主键 ID 和列 Category_id

注意:Category_id 现在可以正确显示ID

对于来自Employee 的输出,我想显示Name 而不是ID

尝试:

$categ = mysql_query("SELECT * FROM employee WHERE id = '" . $_GET['id'] . "'");
$rows = array();

while ($row = mysql_fetch_assoc($categ)) {
  $website_cat = $row;
}

Category表:

+----+----------------+
| ID | Name           |
+----+----------------+
| 23 | Manager        |
| 10 | Boss           |
| 14 | Worker         |
| 41 | Another        |
+----+----------------+

Employee表:

+----+----------------+
| ID | Category_id    |
+----+----------------+
|  1 | Manager        |
|  2 | Boss           |
|  3 | Worker         |
|  4 | Another        |
+----+----------------+

输出:

echo $website_cat['category_id'];

【问题讨论】:

  • 我认为这个问题有些混乱。请查看并编辑它以使其更清晰。也许提供所需输出的示例。
  • category 和employee 的ID 字段如何关联?如果它们是相关的,那么您可以使用 MySQL 查询的 JOIN 函数从员工表中获取并显示 category_id。

标签: php mysql


【解决方案1】:

您要查找的 SQL 关键字是 JOIN。您的查询可能是这样的:

SELECT * FROM employee INNER JOIN category ON employee.category_id = category.id WHERE id = ...

或者,更易读:

SELECT
  *
FROM
  employee
  INNER JOIN category
    ON employee.category_id = category.id
WHERE
  id = ...

(注意:我故意删除了WHERE 子句的最后一点,因为我不愿意将 SQL 注入漏洞放在答案中。Please read this 了解正确执行涉及用户输入的 SQL 查询的一些基础知识. 目前,您的代码很容易受到一种非常常见的攻击形式。)

由于您的某些列具有相同的名称,您甚至可能想要更明确地请求它们:

SELECT
  employee.id AS employee_id,
  category.id AS category_id,
  category.name AS category_name
FROM
  employee
  INNER JOIN category
    ON employee.category_id = category.id
WHERE
  id = ...

然后在您的代码中,您可以访问这些字段:

employee_id, category_id, category_name

所以你可以输出你想要的值:

echo $website_cat['category_name'];

【讨论】:

  • 是的,这是正确答案,我只需要澄清问题并使其显示正确 id WHERE id = '" . $_GET['id'] . "' 的类别,因为当我添加“where”时出现错误 mysql_fetch_assoc() 期望参数 1 是资源,我已阅读您关于“哪里”的说明,现在我需要找到替代方法。
  • @TestPRK:该错误意味着查询失败。使用mysql_error() 从数据库中获取错误消息。另一种方法是使用带有查询参数的准备好的语句。目前,您的代码基本上是执行用户输入作为代码,因此用户可以在您的服务器上执行他们想要的任何代码。带有查询参数的预处理语句将用户输入视为数据,而不是代码
【解决方案2】:

你需要join分类表

$categ = mysql_query("
SELECT employee.*, category.name as category_name FROM employee 
INNER JOIN category on category.id = employee.category_id
WHERE id = '" . $_GET['id'] . "'");

然后用$website_cat['category_name']输出

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-01
    • 2013-02-17
    相关资源
    最近更新 更多