我正在制作一个相关故事部分,它使用帖子中的标签来浏览和查找具有类似标签的其他故事。
我想确保,如果同一篇文章与另一篇文章分享了不止一个标签,我不会多次拉出同一篇文章。
所以基本上就是
foreach($tags as $t) {
$getStories = mysql_query("SELECT * FROM `posts` WHERE `tags` LIKE '%$t%' LIMIT 2");
while($related = mysql_fetch_array($getStories)) {
echo $related['title'];
}所以我根据第一个标签拉出了两个相关的故事,现在,当它在第二个标签的下一个循环中循环时,我如何才能确保上一次拉出的故事不会在第二次或第三次被选中。我确实有一个名为' ID‘的唯一id,只是不确定在这种情况下该如何处理它。
谢谢!
发布于 2010-12-15 14:50:41
你可以做的是一次获取所有相关文章:
$tagsClause = '';
foreach ($tags as $t) {
$tagsClause .= " OR tags LIKE '%$t%'";
}
$tagsClause = substr($tagsClause, 4); // Remove first ' OR '
$getStories = mysql_query('SELECT * FROM `posts` WHERE ' . $tagsClause);
while($related = mysql_fetch_array($getStories)) {
echo $related['title'];
}然而,,这并不说明您使用LIMIT。
编辑
显然,这不会造成问题,请参阅。备注。
发布于 2010-12-15 14:37:48
使用唯一。
SELECT UNIQUE(post_id), [other stuff] FROM posts WHERE [...]发布于 2010-12-15 14:42:46
我认为你可以创建一个包含你选择的id的数组,当你处理一个标签时,检查id不在选择的数组中,但是效率不高。
就像这样:
$ids = array();
foreach($tags as $t) {
$getStories = mysql_query("SELECT * FROM `posts` WHERE `tags` = '$t' LIMIT 2");
//here to check and add id to array ids
while($related = mysql_fetch_array($getStories)) {
echo $related['title'];
}
} https://stackoverflow.com/questions/4447345
复制相似问题