【问题标题】:PHP While loop to search through multiple MySQL queriesPHP While循环搜索多个MySQL查询
【发布时间】:2014-11-29 13:08:37
【问题描述】:

我正在尝试遍历搜索到的标签并收集与该标签相关的所有帖子。为此,我知道我需要使用whileforeach 循环。

变量收集者:$tag = trim($_GET['tag']);

然后,我将像这样搜索标签表:

  $stmt = $mysqli->prepare('SELECT post_id FROM tags WHERE tag = ?');
  $stmt->bind_param('s', $tag);
  $stmt->execute();
  $stmt->bind_result($post_id);
  $stmt->store_result();
  $rows = $stmt->num_rows;
  $stmt->fetch();
  $stmt->close();

这可能会返回 multiple rows,因为它正在搜索具有标签的所有帖子,例如“旅行”。

然后,在收集了相关标签帖子的post_id 之后,我搜索帖子表以获取有关帖子的所有信息,然后将其输出给用户:

  $stmt = $mysqli->prepare('SELECT title FROM posts WHERE id = ?');
  $stmt->bind_param('i', $post_id);
  $stmt->execute();
  $stmt->bind_result($title);
  $stmt->store_result();
  $rows_posts = $stmt->num_rows;
  $stmt->fetch();
  $stmt->close();

我的问题是这只适用于一篇文章,我不知道如何循环这个搜索,所以返回多个具有相同标签的文章。

【问题讨论】:

    标签: php mysql loops foreach while-loop


    【解决方案1】:

    您可以在第一个查询中加入帖子表。

    SELECT posts.title FROM tags
    JOIN posts ON posts.id = tags.post_id
    WHERE tag = ?
    

    然后你可以使用:foreach($stmt->get_result() as $row) {}

    【讨论】:

    • 这看起来很有希望。我应该把$stmt->get_result() 部分放在哪里。我没有得到任何回报,该页面目前不会加载。但现在它在$stmt->close() 之后,所以我想这是可以预料的。
    【解决方案2】:

    请了解 mysql join 的工作原理http://dev.mysql.com/doc/refman/5.0/en/join.html 在您的示例中,正确的查询是:

    SELECT posts.title FROM tags join posts on posts.id = tags.post_id where tag = ?
    

    你不再需要在php中连接数据了。

    【讨论】:

      【解决方案3】:

      为什么不使用

      SELECT title FROM posts P INNER JOIN tags T ON P.id = T.post_id WHERE tag = ?
      

      这将产生指定标签的所有标题

      【讨论】:

        猜你喜欢
        • 2012-02-27
        • 2023-03-30
        • 2013-03-11
        • 2020-06-04
        • 1970-01-01
        • 1970-01-01
        • 2011-01-05
        • 2010-11-23
        • 1970-01-01
        相关资源
        最近更新 更多