提问人:TestPRK 提问时间:3/10/2016 最后编辑:MikeTestPRK 更新时间:3/10/2016 访问量:6386
显示不同表中的名称而不是 ID
Show Name Instead of ID from Different Table
问:
我有 2 张桌子:
Category
带主键和列ID
Name
Employee
带主键和列ID
Category_id
注意:现在显示正确Category_id
ID
我想显示而不是输出。Name
ID
Employee
尝试:
$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'];
答:
5赞
David
3/10/2016
#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 = ...
(注意:我故意删除了该条款的最后一点,因为我不愿意将 SQL 注入漏洞放在答案中。请阅读本文,了解正确执行涉及用户输入的 SQL 查询的一些基础知识。目前,您的代码很容易受到一种非常常见的攻击形式。WHERE
由于您的某些列共享相同的名称,您甚至可能希望更明确地请求它们:
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'];
评论
0赞
TestPRK
3/10/2016
是的,这是正确的答案,我只需要澄清问题并使其显示正确 id 的类别,因为当我添加“哪里”时出现错误mysql_fetch_assoc() 期望参数 1 是资源。我已经阅读了您关于“在哪里”的说明,现在我需要找到替代方案。WHERE id = '" . $_GET['id'] . "'
0赞
David
3/10/2016
@TestPRK:该错误表示查询失败。用于从数据库中获取错误消息。另一种方法是使用带有查询参数的预准备语句。目前,您的代码基本上是将用户输入作为代码执行,因此用户可以在您的服务器上执行他们想要的任何代码。带有查询参数的预准备语句将用户输入视为数据,而不是代码。mysql_error()
1赞
Tuan Duong
3/10/2016
#2
您需要加入类别表
$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']
评论