Проблема с отображением PHP и MySQL

0

My script должен найти все связанные записи из текущих категорий сообщений, которые могут быть одной или многих категорий, но я хочу, чтобы script отображал текущую запись как связанную запись. Как я могу это сделать? И где я могу добавить его в свой script?

Вот моя таблица 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)
);

Вот мой script простите беспорядок.

$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
Лучший ответ

Самый простой способ - сохранить текущий идентификатор сообщения в переменной (мы будем называть его $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'], то выделите строку. Он будет делать то же самое.

  • 0
    Есть ли способ проверить, был ли $current_post_id единственным результатом в цикле?
  • 0
    Простой способ - установить переменную сразу после вывода тега li. После завершения цикла вы можете проверить, установлена ли эта переменная. Если это не так, вы знаете, что не было никаких других результатов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню