PHP While循环搜索多个MySQL查询

时间:2014-10-04 19:42:41

标签: php mysql loops foreach while-loop

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

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

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

我的问题是这只适用于一个帖子而且我不知道如何循环搜索,因此会返回具有相同标记的多个帖子。

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

为什么不使用

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

这将导致指定标签的标题