Я пытаюсь просто отобразить статьи и их комментарии, где поле deletion
пользователей не равно 1
а active
NULL
равно NULL
, но по какой-то причине в моем запросе отображаются комментарии из статей, где поле deletion
равно 1
. Как это исправить?
MySQL таблицы
CREATE TABLE users (
user_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
username VARCHAR(255) NULL,
password CHAR(128) NOT NULL,
active CHAR(32),
deletion TINYINT(1) UNSIGNED NOT NULL DEFAULT 0,
PRIMARY KEY (user_id),
UNIQUE KEY (username)
);
CREATE TABLE articles_comments (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
parent_comment_id INT UNSIGNED NOT NULL,
user_id INT UNSIGNED NOT NULL,
article_id INT UNSIGNED NOT NULL,
comment TEXT NOT NULL,
date_created DATETIME NOT NULL,
PRIMARY KEY (id),
KEY user_id (user_id),
KEY article_id (article_id)
);
CREATE TABLE users_articles (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
user_id INT UNSIGNED NOT NULL,
title TEXT NOT NULL,
summary TEXT DEFAULT NULL,
content LONGTEXT NOT NULL,
PRIMARY KEY (id)
);
ввод таблиц article_comments
comment_id parent_comment_id user_id article_id comment
1 0 1 1 -
2 0 2 1 -
3 0 2 2 -
4 0 1 2 -
5 0 2 3 -
6 0 2 4 -
7 1 2 1 -
8 2 2 1 -
9 0 3 1 -
ввод таблиц users_articles
id user_id title summary content
1 3 - - -
2 4 - - -
3 4 - - -
4 4 - - -
ввод пользовательских таблиц
user_id username password deletion active
1 - - 0 NULL
2 - - 0 NULL
3 - - 1 NULL
4 - - 0 NULL
Мой текущий вывод на дисплей
user_id comment_id article_id
1 1 1
2 2 1
2 3 2
1 4 2
2 5 3
2 6 4
2 7 1
2 8 1
Мой желаемый выход
user_id comment_id article_id
2 3 2
1 4 2
2 5 3
2 6 4
Мой текущий код MySQL.
SELECT *
FROM users_articles
INNER JOIN articles_comments ON users_articles.id = articles_comments.article_id
INNER JOIN users ON articles_comments.user_id = users.user_id
WHERE users.active IS NULL
AND users.deletion = 0
попробуйте это
EDIT:
SELECT * FROM users_articles,articles_comments,users where users_articles.id = articles_comments.article_id and articles_comments.user_id = users.user_id and users_articles.user_id=users.user_id and userusers.active IS NULL AND users.deletion = 0;
Примечание. Не рекомендуется выбирать все (*) с объединенными таблицами.
deletion
1 - это пользователь 3, которого нет в списке результатов. Вы хотите, чтобы статьи и их комментарии не содержали комментариев к каждой статье от удаленного пользователя, хотя другие комментарии (и сама статья) были не от удаленных пользователей? Например, если пользователь 1 был удален, то любой комментарий к статье 2 больше не будет включен в вывод.