我正试图循环浏览一个搜索到的标签,并收集与该标签相关的所有帖子。为此,我知道我需要使用while
或foreach
循环。
变量由$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 = ?
这将导致指定标签的所有标题