[英]Two SELECT statments into one SQL
尝试使问题变得更容易理解
我有两个表:
posts
id
title
descr
body
cat_id
cats
id
name
为了从表格中获取所有信息,我使用了以下方法:
sql = "SELECT * FROM posts ORDER BY id";
$query = $db->prepare($sql);
$query->execute();
$posts = $query->fetchAll();
现在从我使用的cat_id获取每个帖子的类别名称
'SELECT c.name FROM cats c INNER JOIN posts p ON c.id = p.cat_id ORDER BY p.id DESC';
我想将这两个查询结合起来,这样我就可以显示由cat_id插入的类别名称(例如,不是Sports,我得到了1,其中应该显示类别)。
例如,要显示我之后使用的帖子的所有内容
foreach($posts as $post):
<?php echo $post['title']; ?>
而且当我使用此选项时,我无法仅显示类别名称cat_id。
我尝试了UNION,并尝试进行两个查询,但是无法在foreach中使用foreach,但出现错误。
没有办法去做你直接问的事情。 每个SELECT
语句都是一个唯一的查询,该查询返回数据库驱动程序的结果,该结果将通过上述fetchAll()
获得。 (请注意,还有其他从PHP数据库中获取值的方法,例如https://www.php.net/manual/zh-cn/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
这将为您提供所有具有相关post
的cats
的名字。 您可以通过以下方式使用它:
<?php
$sql = "see above SELECT";
$query = $db->prepare($sql);
$query->execute();
$categoryTitles = $query->fetchAll();
foreach ($categoryTitles as $title) {
echo $title['title'];
}
(请注意,该示例会将大量文本输出到浏览器,您需要将其集成到自己的HTML生成代码中)
您发布的代码:
foreach($posts as $post):
<?php echo $post['title']; ?>
看起来不像是完全有效的PHP。 foreach
看起来像在<?php ... ?>
块之外。 而且,如果它在这些块之一中,您将嵌套PHP块,例如: <?php foreach($posts as $post) { <?php echo $post['title']; ?> } ?>
<?php foreach($posts as $post) { <?php echo $post['title']; ?> } ?>
我认为这不是有效的语法。 另外,您在foreach
后面加上一个:
我也不确定语法是否有效。 您的示例代码还从数据库中选择name
列,而不是您试图在PHP代码中检索的title
列。
有效语法的示例为:
<?php
// all the PDO code
?>
<!-- some HTML -->
<?php foreach ($posts as $post) { ?>
<div> some more HTML </div>
<? echo $post['title']; ?>
<?php } ?>
执行您要问的另一种方法是将SQL代码转换为存储过程,但这对于您当前的用例而言可能太复杂了。 (如果您想了解有关MySQL中存储过程的更多信息,请查看以下Stack Overflow答案: MySQL存储过程初学者指南? )
回答您的查询。 下面是我的SQL。 在下面的查询中,您可以从帖子和单个列(即名称)中选择所有记录。
如果要具有所有列,请使用p对其进行编辑。 ,C。 或只是给*。 因此它将为您获取所有列。 希望这能回答您的查询。 如果没有,请再解释一下您的问题。
SELECT p.name,c.* FROM cats as c
INNER JOIN posts as p ON cats.id = posts.cat_id;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.