Доброго времени суток. Помогите сформировать sql запрос так называемой "ленты новостей" тоесть выводить только записи своих друзей.
таблица друзей frends - id | user | frend таблица новостей lenta - id | user | text | time
frends id | user | frend
1 nik nik2
2 nik nik3
3 nik3 nik2
4 nik4 nik2
lenta id | user | text | time
1 nik3 text1
2 nik2 text2
3 nik4 text3
4 nik2 text4
5 nik4 text5
6 nik3 text6
нужно что бы выводились записи только пользователей nik2 и nik3, так как они мои друзья. Вроде этого - text1, text2, text4, text6
select `text`
from lenta
where `user` in (select friend from friends where `user` = 'nik')
SELECT DISTINCT `lenta`.`text`
FROM `lenta`
JOIN `frends`
ON `lenta`.`user` = `frends`.`frend`;
Добавил "DISTINCT", исключающий повторы строк в выборке.
Для небольших таблиц отлично будут работать варианты, которые представлены выше, но обычно такие таблицы редко остаются небольшими. При сколько-нибудь большом количестве данных база данных с такой архитектурой ляжет. Поэтому вот мой совет:
Почему именно такой совет, а не через JOIN? Допустим, у Вас 10 тыс. активных пользователей, у каждого условно по 100 друзей, итого 1 млн. записей в первой таблице. Без перевода в INT она уже будет тормозить или вообще ляжет. Далее вторая таблица, допустим раз в неделю каждый активный пользователь публикует 2-3 записи, итого за год будет 1-1.5 млн. записей, по каждой из которых надо проводить проверку. Уже на таком объеме указанные выше запросы работать не будут. И это ни разу даже близко не High Load.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей