SQL для получения сообщений только от людей, на которых я подписан - PullRequest
0 голосов
/ 10 августа 2009

Мне интересно, как создать SQL-запрос, чтобы получать сообщения только от людей, на которых я подписан. Я предполагаю, что создание запроса на соединение SQL - правильный путь, но я не знаю как. Пожалуйста, кто-нибудь может мне помочь?

У меня сейчас есть три таблицы:

CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 255 ) NOT NULL ,
`email` VARCHAR( 255 ) NOT NULL ,
`password` VARCHAR( 8 ) NOT NULL ,
`status` ENUM( 'active', 'inactive' ) NOT NULL
) ENGINE = MYISAM ;

CREATE TABLE `posts` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`user_id` INT NOT NULL ,
`body` VARCHAR( 140 ) NOT NULL ,
`stamp` DATETIME NOT NULL
) ENGINE = MYISAM ;

CREATE TABLE `following` (
`user_id` INT NOT NULL ,
`follower_id` INT NOT NULL ,
PRIMARY KEY ( `user_id` , `follower_id` )
) ENGINE = MYISAM ;

Большое спасибо за ваш ответ.

Ответы [ 3 ]

2 голосов
/ 10 августа 2009

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

select p.body, p.stamp, pu.username
from posts p
  join
  following f
  on f.user_id = p.user_id
  join
  users you
  on you.user_id = f.follower_id
  join
  users pu
  on pu.user_id = p.user_id
where you.username = 'obadja7'
;

... или что-то в этом роде.

Rob

2 голосов
/ 11 августа 2009

Теперь у вас есть 3 ответа: ПРИСОЕДИНЯЙТЕСЬ, СУЩЕСТВУЕТ

SELECT *
FROM POSTS p
WHERE EXISTS (SELECT *
    FROM following f
    WHERE f.follower_id = @your_id AND f.user_id = p.user_id)

Я бы использовал EXISTS, потому что обычно:

  • он дает тот же план (как JOIN + IN, зависит от дубликатов)
  • поддерживает составные ключи (IN нет)
  • нет необходимости дублировать вывод (например, JOIN)
1 голос
/ 10 августа 2009

Как это:

SELECT * FROM POSTS
WHERE user_id IN (SELECT user_id FROM following
    WHERE follower_id = @your_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...