php - 两个 SELECT 语句合并为一个 SQL

标签 php mysql sql select

我会尽力让它更容易理解

我有两个表:

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 组成的类别名称(例如,我在应该显示类别的地方得到 1,而不是 Sports)。

显示我之后使用的帖子中的所有内容

    foreach($posts as $post):
 <?php echo $post['title']; ?> 

当我使用这个时,我无法仅显示类别名称 cat_id。

我尝试了 UNION 并尝试进行两个查询,但无法在 foreach 中使用 foreach 我收到错误。

最佳答案

没有办法做你直接要求的事情。每个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 ... ?> 之外堵塞。如果它位于这些 block 之一的内部,您将嵌套 PHP block ,例如: <?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 代码转换为存储过程,但这对于您当前的用例来说可能太复杂了。 (如果您想了解有关 MySQL 中存储过程的更多信息,请查看以下 Stack Overflow 答案: Beginners' guide to stored procedures with MySQL? )

关于php - 两个 SELECT 语句合并为一个 SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57776454/

相关文章:

php - 谷歌地图地理定位不请求许可

javascript - 嵌套 HTML 按钮不会执行 javascript

php - 内部连接的问题

mysql - 如何在 MySQL 中找到某个名称具有列 = 1 的行,但不存在具有相同名称但没有列 = 2 的另一行?

mysql - 条件 mysql 查询的最佳实践

mysql - 为什么没有区别。从架构和 phpmyadmin 获取时的行数

SQL Server Management Studio 2012 挂起

mysql - SQL中定义字符串时前导 "X"是什么意思?

php - wordpress 高级自定义字段和 polylang 集成

sql - 具有泛型类型参数的 Scala doobie 片段