запрос mysql, чтобы скрыть все сообщения заблокированного пользователя

#php #mysql #arrays #laravel

#php #mysql #массивы #laravel

Вопрос:

Имя таблицы: user_post

 id     user_id    post

1         2       hi ths is aaaaa

2         3       hi ths is yyyyyy
  

Имя таблицы: user_block

 id      post_id     user_id  block_id  status

1      1                2       4         1
  

Пожалуйста, скажите мне, что запрос select в заблокированном пользователе all posts должен скрывать мой запрос:

 SELECT * FROM `user_block`
  WHERE `id` NOT IN (
    SELECT `post_id` FROM `user_block`
      WHERE `user_id` = '{$userID}'
      AND `status` = '1'
  )
  

Но этот запрос не скрывает все сообщения заблокированного пользователя

Комментарии:

1. где hide_post таблица?

2. я имею в виду user_block

3. Вы хотите получить все сообщения из user_post без сообщений заблокированных пользователей, не так ли?

Ответ №1:

Это:

 select * from user_post
where '{$userID}' not in (
  select user_id from user_block
  where status = '1'
)
  

скроет все сообщения, если userid имеет значение 1 внутри user_block .
Если вы хотите, чтобы пользователь видел только свои собственные сообщения:

 select * from user_post
where '{$userID}' not in (
  select user_id from user_block
  where status = '1'
)
and user_id = '{$userID}'
  

Комментарии:

1. я думаю, что левое соединение более эффективно

Ответ №2:

Попробуйте это

 SELECT * FROM user_post LEFT OUTER JOIN user_block
ON user_post.user_id = user_block.user_id
WHERE user_block.user_id IS null
  

Очень полезный пост. Объединения, которые наглядно объясняются здесь

Комментарии:

1. Это не отвечает на вопрос