为了账号安全,请及时绑定邮箱和手机立即绑定

将两条 SELECT 语句合并为一条 SQL

将两条 SELECT 语句合并为一条 SQL

PHP
缥缈止盈 2021-12-24 15:38:19
我会尽量让它更容易理解我有两个表:posts    id    title    descr    body    cat_idcats    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 的类别名称(例如,我得到 1 应显示类别的位置,而不是 Sports)。例如,显示之后我使用的帖子中的所有内容    foreach($posts as $post): <?php echo $post['title']; ?> 当我使用它时,我不能只显示类别名称 cat_id。我尝试了 UNION 并尝试进行两个查询,但无法在 foreach 中使用 foreach 我出错了。
查看完整描述

2 回答

?
慕的地8271018

TA贡献1796条经验 获得超4个赞

回答您的查询。下面是我的 SQL。在下面的查询中,您可以从帖子和单列(即名称)中选择所有记录。


如果您想拥有所有列,请使用 p 对其进行编辑。,C。或者只是给 *. 所以它会为你获取所有的列。希望这能回答您的疑问。如果不是,请多解释一下您的问题。


SELECT p.name,c.* FROM cats as c 

INNER JOIN posts as p ON cats.id = posts.cat_id;


查看完整回答
反对 回复 2021-12-24
?
桃花长相依

TA贡献1860条经验 获得超8个赞

没有办法做你直接问的事情。每个SELECT语句都是一个唯一的查询,它返回数据库驱动程序的结果,您将通过fetchAll()上面写的方式获得结果。(请注意,有其他的方法来从PHP数据库获得的值,如fetch()在描述https://www.php.net/manual/en/pdostatement.fetch.php。如果你不需要整套一个大列表中的结果,您可能会考虑使用该方法)


其他评论者说的是对的,你想做的是:


SELECT c.title

FROM cats c

INNER JOIN posts p ON c.id = p.cat_id

ORDER BY p.id DESC

这将为您提供所有cats具有关联post. 您可以通过以下方式使用它:


<?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']; ?> } ?>我认为这不是有效的语法。另外你:在foreach我不确定是否有效的语法之后放了一个。您的示例代码还name从数据库中选择列,而不是title您尝试在 PHP 代码中检索的列。


有效语法的一个例子是:


<?php

// all the PDO code

?>

<!-- some HTML -->

<?php foreach ($posts as $post) { ?>

  <div> some more HTML </div>

  <? echo $post['title']; ?>

<?php } ?>

执行您所询问的另一种方法是将您的 SQL 代码转换为存储过程,但这对于您当前的用例来说可能太复杂了。

查看完整回答
反对 回复 2021-12-24
  • 2 回答
  • 0 关注
  • 212 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信