PHP While循环来搜索多个MySQL查询


PHP While loop to search through multiple MySQL queries

我正试图循环浏览一个搜索到的标签,并收集与该标签相关的所有帖子。为此,我知道我需要使用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();

这可能会返回多行,因为它正在搜索所有带有标记的帖子,例如"trips"。

然后,在收集了相关标记帖子的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();

我的问题是,这只适用于一篇帖子,我不知道如何循环搜索,所以会返回多篇带有相同标签的帖子

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

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

那么您可以使用:foreach($stmt->get_result() as $row) {}

请了解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中的数据了。

为什么不使用

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

这将导致指定标签的所有标题