Какой SQL-запрос мне придется использовать, если я хочу получить результаты из сообщений таблицы, но исключаю строки, которые имеют значение в 'messages_view', где поле messages.message = messages_view.id AND messages.deleted = 1 AND messages_view. пользователь = $ somephpvariable
В более простых условиях у меня есть таблица сообщений с каждым сообщением, обозначенным как «id», а также таблица messages_view, связанная с полем «сообщение». Я хочу получить строки в сообщении , которые не удаляются (поступает из messages_view ) для определенного «пользователя». 'deleted' = 1, когда сообщение удалено.
Вот мой текущий SQL-запрос, который просто получает значения из:
SELECT * FROM messages WHERE ((m_to=$user_id) OR (m_to=0 AND (m_to_state='' OR m_to_state='$state') AND (m_to_city='' OR m_to_city='$city')))
Вот макет моих таблиц:
table: messages ---------------------------- id (INT) (auto increment) m_from (INT) <-- Represents a user id (0 = site admin) m_to (INT) <-- Represents a user id (0 = all users) m_to_state (VARCHAR) m_to_city (VARCHAR) table: messages_view ---------------------------- message (INT) <-- Corresponds to messages.id above user (INT) <-- Represents a user id deleted (INT) <-- 1 = deleted
Я действительно думаю, что это так просто:
SELECT * FROM messages WHERE ((m_to=$user_id) OR (m_to=0 AND (m_to_state='' OR m_to_state='$state') AND (m_to_city='' OR m_to_city='$city'))) AND NOT EXISTS ( SELECT * FROM messages_view WHERE messages.message = messages_view.id AND messages.deleted = 1 AND messages_view.user = $somephpvariable )
Select ... From Messages M Where M.deleted = 0 And Not Exists ( Select 1 From Messages_View MV1 Where MV1.message = messages_view.Id And MV1.user = $somephpvariable )
Существует противоречие с вашим первым абзацем и вашим вторым абзацем относительно того, что вы хотите относительно удаляемого флага.