我正在尝试循环搜索标记并收集与该标记相关的所有帖子。为此,我知道我需要使用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();
这可能会返回多行,因为它正在搜索所有带有标记的帖子,例如' 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();
我的问题是这只适用于一个帖子而且我不知道如何循环搜索,因此会返回具有相同标记的多个帖子。
答案 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 = ?
这将导致指定标签的标题