PHP& MySQL显示问题

时间:2010-08-30 05:21:20

标签: php mysql

我的脚本应该找到当前帖子类别中可能是一个或多个类别的所有相关帖子,但我想阻止脚本将当前帖子显示为相关帖子。我怎样才能做到这一点?我在哪里将它添加到我的脚本中?

这是我的MySQL表。

CREATE TABLE categories ( 
id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
parent_id INT UNSIGNED NOT NULL DEFAULT 0, 
category VARCHAR(255) NOT NULL, 
url VARCHAR(255) NOT NULL,
PRIMARY KEY (id), 
INDEX parent (parent_id),
UNIQUE KEY(parent_id, url)
);

CREATE TABLE users_posts (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
user_id INT UNSIGNED NOT NULL,
title TEXT NOT NULL,
summary TEXT DEFAULT NULL,
post_content LONGTEXT NOT NULL,
PRIMARY KEY (id)
);

这是我的脚本原谅了这个烂摊子。

$posts_categories = array();
$ac_query = mysqli_query($mysqli, "SELECT category_id 
                                   FROM posts_categories
                                   WHERE post_id = '" . $post_id . "'");

if (!$ac_query) {
    print mysqli_error($mysqli);
} else {
    while($row = mysqli_fetch_array($ac_query)){
        $posts_categories[] = $row['category_id'];
    }
}

$posts_categories_name = array();
$acn_query = mysqli_query($mysqli, "SELECT category 
                                    FROM categories 
                                    WHERE id IN(" . implode(',', $posts_categories) . ")"); 

if (!$acn_query) {
    print mysqli_error($mysqli);
} else {
    while($row = mysqli_fetch_array($acn_query)){
        $posts_categories_name[] = $row['category'];
    }
}

$x2 = '';
$c2 = '';
foreach($posts_categories_name as $acn) {
    $x2++;
    if($x2 == 1){
        $c2 .= " users_posts.title LIKE '%$acn%' OR users_posts.summary LIKE '%$acn%' OR users_posts.post_content LIKE '%$acn%'";
    } else {
        $c2 .= " OR users_posts.title LIKE '%$acn%' OR users_posts.summary LIKE '%$acn%' OR users_posts.post_content LIKE '%$acn%'";
    }
}

$rac_query = mysqli_query($mysqli, "SELECT *
                                    FROM users_posts
                                    WHERE $c2 
                                    ORDER BY RAND() 
                                    LIMIT 5");
if (!$rac_query) {
    print mysqli_error($mysqli);
} else {
    while($row = mysqli_fetch_array($rac_query)){ 
        echo '<li>' . $purifier->purify(strip_tags($row['title'])) .'</li>';
    }
}

1 个答案:

答案 0 :(得分:0)

最简单的方法是将当前帖子的id保存在变量中(我们称之为$ current_post_id)然后只是:


if (!$rac_query) {
    print mysqli_error($mysqli);
} else {
    while($row = mysqli_fetch_array($rac_query)){
        if($current_post_id == $row['id']){
            continue;
        }
        echo '<li>' . $purifier->purify(strip_tags($row['title'])) .'</li>';
    }
}

这是你发布的最后一段代码,BTW。 “继续”意味着跳到下一轮while循环。

当然你也可以通过简单的方式来做,并说如果$ current_post_id!= $ row ['id']然后回显该行。它会做同样的事情。