繁体   English   中英

将两个SELECT语句合并到一个SQL中

[英]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

这将为您提供所有具有相关postcats的名字。 您可以通过以下方式使用它:

<?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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM