Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查询循环内的查询,需要两个查询输出_Php_Mysql_Navigation - Fatal编程技术网

Php 查询循环内的查询,需要两个查询输出

Php 查询循环内的查询,需要两个查询输出,php,mysql,navigation,Php,Mysql,Navigation,在我的网站上,我想制作一个导航栏,就像,有类别(这里是2012年)和文章(这里是5月到10月)。我有一个MySQL数据库,其中包含所有类别(infocat_id、name),还有一个包含所有文章(title、body、category、infopost_id) 我想我可以按如下方式编写php代码: <ul> <?php $query1 = $db->prepare("SELECT infocat_id, name FROM info_category");

在我的网站上,我想制作一个导航栏,就像,有类别(这里是2012年)和文章(这里是5月到10月)。我有一个MySQL数据库,其中包含所有类别(infocat_id、name),还有一个包含所有文章(title、body、category、infopost_id)

我想我可以按如下方式编写php代码:

<ul>
   <?php
    $query1 = $db->prepare("SELECT infocat_id, name FROM info_category");
    $query1->execute();
    $query1->bind_result($infocat_id, $name);
    while($query1->fetch()):
   ?>
   <li>
      <?php echo $name; ?>
      <ul>
         <?php
          $query2 = $db->prepare("SELECT title, infopost_id FROM info_posts WHERE category = $infocat_id");
          $query2->execute();
          $query2->bind_result($title, $infopost_id);
          while($query2->fetch()):
         ?>
         <li><?php echo $title; ?></li>
         <?php endwhile; ?>
      </ul>
   </li>
   <?php endwhile; ?>
</ul>
遗憾的是,这不起作用,因为我只得到了第一个类别名称,并且在[php文件所在目录]的第[code>$query2->execute();]行的“致命错误:调用非对象上的成员函数execute()”

我想我不能使用连接,因为我还需要第一个查询的输出


我对PHP不是很有经验,因此如果有人能帮助我,我将不胜感激。

使用join获得所需的输出:

 SELECT cat.infocat_id, cat.name,post.title, post.infopost_id  

    FROM info_category cat

    left join 
    info_posts post on post.category=cat.infocat_id

注意:如果只需要匹配条件的数据,请使用内部联接。

使用联接获得所需的输出:

 SELECT cat.infocat_id, cat.name,post.title, post.infopost_id  

    FROM info_category cat

    left join 
    info_posts post on post.category=cat.infocat_id

注意:如果您只需要匹配条件的数据,请使用内部联接。

您可以使用联接,只需检查键中的更改即可决定是否再次输出标题

未经测试,但大致如下:-

<ul>
   <?php
   $prev_infocat_id = 0;
    $query1 = $db->prepare("SELECT infocat_id, name, title, infopost_id
                FROM info_category
                LEFT OUTER JOIN info_posts
                ON info_category.infocat_id = info_posts.category");
    $query1->execute();
    $query1->bind_result($infocat_id, $name, $title, $infopost_id);
    while($query1->fetch())
    {
        if ($prev_infocat_id == 0)
        {
            echo '<li>';
        }
        else
        {
            if ($prev_infocat_id != $infocat_id)
            {
                echo '</li><li>';
            }
        }
        $prev_infocat_id = $infocat_id;
        echo '<li>'.$title.'</li>';
    } 
    if ($prev_infocat_id != 0)
    {
        echo '</li>';
    }
   ?>
</ul>

您可以使用连接,只需检查键中是否有更改,即可决定是否再次输出标题

未经测试,但大致如下:-

<ul>
   <?php
   $prev_infocat_id = 0;
    $query1 = $db->prepare("SELECT infocat_id, name, title, infopost_id
                FROM info_category
                LEFT OUTER JOIN info_posts
                ON info_category.infocat_id = info_posts.category");
    $query1->execute();
    $query1->bind_result($infocat_id, $name, $title, $infopost_id);
    while($query1->fetch())
    {
        if ($prev_infocat_id == 0)
        {
            echo '<li>';
        }
        else
        {
            if ($prev_infocat_id != $infocat_id)
            {
                echo '</li><li>';
            }
        }
        $prev_infocat_id = $infocat_id;
        echo '<li>'.$title.'</li>';
    } 
    if ($prev_infocat_id != 0)
    {
        echo '</li>';
    }
   ?>
</ul>

你在寻找嵌套类别吗?你是如何获得在第二次查询中使用的
$infocat\u id
的?你是在寻找嵌套类别吗?你是如何获得在第二次查询中使用的
$infocat\u id
的?嗨,你的代码工作得很好!它只列出了文章,没有列出类别,但我已经修复了mysel已经有了。非常感谢!嗨,你的代码工作得很好!它只列出了文章,没有列出类别,但我已经自己修复了。非常感谢!