我会尽力使其更容易理解
我有两个表:
manager
要从表格帖子中获取所有信息,我使用了此方法:
posts
id
title
descr
body
cat_id
cats
id
name
现在从我使用的cat_id中获取每个帖子的类别名称
sql = "SELECT * FROM posts ORDER BY id";
$query = $db->prepare($sql);
$query->execute();
$posts = $query->fetchAll();
我想结合这两个查询,以便可以显示由cat_id插入的类别名称(例如,代替Sports我在显示类别的位置显示1)。
要显示我之后使用的帖子中的所有内容
'SELECT c.name FROM cats c INNER JOIN posts p ON c.id = p.cat_id ORDER BY p.id DESC';
当我使用此选项时,我无法仅显示类别名称cat_id。
我尝试了UNION,并尝试进行两个查询,但是无法在foreach中使用foreach,但出现错误。
答案 0 :(得分:0)
无法执行您直接询问的事情。每个SELECT
语句都是一个唯一查询,该查询返回数据库驱动程序的结果,您可以通过上述操作通过fetchAll()
获得该结果。 (请注意,还有其他方法可以从PHP数据库中获取值,例如https://www.php.net/manual/en/pdostatement.fetch.php中所述的fetch()
。如果您不需要一个大列表中的全部结果,则可以考虑使用使用该方法)
另一位评论者说的是正确的,您要做的是:
SELECT c.title
FROM cats c
INNER JOIN posts p ON c.id = p.cat_id
ORDER BY p.id DESC
这将为您提供所有具有关联的cats
的{{1}}的名称。您可以通过以下方式使用它:
post
(请注意,该示例将向浏览器输出一大段文本,您需要将其集成到自己的HTML生成代码中)
您发布的代码:
<?php
$sql = "see above SELECT";
$query = $db->prepare($sql);
$query->execute();
$categoryTitles = $query->fetchAll();
foreach ($categoryTitles as $title) {
echo $title['title'];
}
看起来不像是完全有效的PHP。 foreach($posts as $post):
<?php echo $post['title']; ?>
看起来像在foreach
块的外面。而且,如果它在这些块之一中,您将嵌套PHP块,例如:<?php ... ?>
,我认为这不是有效的语法。另外,您在<?php foreach($posts as $post) { <?php echo $post['title']; ?> } ?>
后面放置:
,但我也不确定语法是否有效。您的示例代码还从数据库中选择了foreach
列,而不是您试图在PHP代码中检索的name
列。
有效语法的示例为:
title
要做的另一种方法是将SQL代码转换为存储过程,但这对于您当前的用例而言可能太复杂了。 (如果您想了解有关MySQL中存储过程的更多信息,请查看以下Stack Overflow答案:Beginners' guide to stored procedures with MySQL?)
答案 1 :(得分:0)
回答您的查询。下面是我的SQL。 在下面的查询中,您可以从帖子和单列(即名称)中选择所有记录。
如果要具有所有列,请使用p。,c。进行编辑,或仅输入*。 因此它将为您获取所有列。 希望这能回答您的查询。如果没有,请进一步解释您的问题。
SELECT p.name,c.* FROM cats as c
INNER JOIN posts as p ON cats.id = posts.cat_id;