如何根据Id选择类别名称

时间:2014-02-10 09:24:00

标签: php mysql sql database

我正在使用PHP,MYSQL。我有两张桌子

posts包含以下字段

id,
title,
body,
cat_id

categories包含以下字段

cat_id,
cat_name

假设我在posts

中有以下数据
id = 1
title = "This is Test Post"
body = "This is the Body of Test Pots"
cat_id = 3

并在categories

cat_id = 3
cat_name = "Mobiles"

如果我使用以下SQL语句

"SELECT * FROM posts WHERE id=1";

它会给我以下输出

id = 1
title = "This is Test Post"
body = "This is the Body of Test Pots"
cat_id = 3

但我想要以下输出

id = 1
title = "This is Test Post"
body = "This is the Body of Test Pots"
cat_id = Mobiles

如何获得上述输出。

注意:我知道在这种情况下会使用某种JOIN,但我不知道如何使用它。还有一件事,是否有可能在不使用任何JOIN的情况下获得我想要的输出,因为我听说JOINs影响了效率。如果需要JOIN请告诉我获得所需输出的最有效方法。

5 个答案:

答案 0 :(得分:2)

SELECT * FROM posts JOIN categories USING (cat_id) WHERE posts.id = 1

使用correlated subquery可以实现相同的目标(但这很可能是less efficient than a join):

SELECT *, (SELECT cat_name FROM categories WHERE cat_id = posts.cat_id)
FROM   posts
WHERE  id = 1

答案 1 :(得分:0)

您必须使用join查询来加入帖子和类别,以便从两个表中获取信息。所以你尝试使用以下查询

SELECT t1.*,t2.cat_name FROM posts as t1 join categories as t2 on t1.cat_id = t2.cat_id  WHERE t1.id=1

答案 2 :(得分:0)

使用连接查询 试试这个

SELECT id, title, body, cat_name FROM posts 
join categories on posts.cat_id = categories.cat_id  WHERE id=1

答案 3 :(得分:0)

  

从帖子内部选择post.id,post.title,post.body,cat.cat_name   在cat.cat_id = post.cat_id上加入类别cat   和post.id = 1

答案 4 :(得分:0)

我认为你必须先学习JOINS首先阅读这篇文章

现在关于你的问题检查

<强> SQL FIDDLE

SELECT * FROM posts As p
JOIN categories AS c ON c.id = p.cat_id
WHERE p.id = 1

现在您可以选择是否使用联接或子查询都有其优缺点 因此根据您的要求选择。

希望这会对你有帮助......!