|
|
|
| Есть бд friends, структура:
friend_id friend_user_id friend_friend_id friend_accept
|
friend_id уникальный индитификатор записи
friend_user_id ID юзера чей друг
friend_friend_id ID друга
friend_accept флаг Y или N (подтвержена дружба или нет)
К примеру юзер с ID 6 подал заявку на дружбу с юзером с ID 9 в БД добавляются две записи:
friend_id friend_user_id friend_friend_id friend_accept
1 6 9 Y
2 9 6 N
|
первая запись добавляет друга к юзеру 6, а вторая к юзеру 9. Отличаются они только флагами. В первой записи естественно Y, так как человек сам пригласил юзера в друзья, а во второй записи N так как второй юзер ещё не подтвердил, что он на самом деле хочет дружить с юзером 6.
Вроде бы структура не плохая - думал я пока не дошел до момента, когда мне нужно вывести всех друзей юзера 6.
Сначало написал:
SELECT * FROM friends WHERE friend_user_id='6' friend_accept='Y'
А потом подумал, ё моё мне же надо выводить тех друзей, у кого тоже есть в друзьях юзер с ID 6 и тоже подтверждена дружба. Запрос я пока не знаю как такой построить, но че то мне расхотелось спрашивать как построить такой запрос, потому что он полюбому будет не очень быстрый, с условием того, что в таблице будет много записей. И решил вот спросить у форумчан, может у кого есть альтернативные варианты построения БД? | |
|
|
|
|
|
|
|
для: JIEXA
(12.08.2007 в 00:18)
| | Ведите две таблицы.
Одну - с поданными заявками.
Другую - с акцептованными.
Тогда доп флажок не понадобится, и всё будет летать.
Касательно ё-моё, могу сказать, что дружба - отношение не транзитивное даже в реальной жизни, а уж тем более в датинг-системе.
Если Оля любит Васю, а Вася любит Водку, это еще не повод Оле тоже любить Водку. | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2007 в 01:17)
| |
Касательно ё-моё, могу сказать, что дружба - отношение не транзитивное даже в реальной жизни, а уж тем более в датинг-системе.
Если Оля любит Васю, а Вася любит Водку, это еще не повод Оле тоже любить Водку.
|
Вы меня не поняли, я не собираюсь выводить друзей друга. Ну вприцнипе я вашу идею понял, поэтому не буду стараться объяснить о чем я сказал ) | |
|
|
|