我正在使用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
请告诉我获得所需输出的最有效方法。
答案 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
现在您可以选择是否使用联接或子查询都有其优缺点 因此根据您的要求选择。
希望这会对你有帮助......!