Хочу написать модуль к своему сайту "Мои друзья" ...
так вот ...
если пользователь с id - 1 решил добавить себе в друзья пользователя с id - 2 то запрос будет такой :
mysql_query("INSERT INTO friends SET userid='1', friendid='2', status='per' ");
userid - тот кто добавляет
friendid - кого добавляет
status - per - не подтвержден (еще есть 1 - подтвержден и 0 - отказ)
после у id - 2 появляеться оповещение ( 1 новый запрос) - он нажимает окей ... и
status меняеться на 1
после этого нужно вывести всех друзей. ...
вот здесь у меня и проблема
$res = sql_query("SELECT f.status,f.friendid as id,f.status, u.username AS name, u.class,u.ip, u.avatar,u.nick,u.family, u.title, u.donor, u.warned, u.enabled,u.added,u.sex, u.last_access
FROM friends AS f
JOIN users as u
ON f.friendid = u.id
WHERE f.status='1'
AND userid='1'
OR friendid='1'
ORDER BY name") ;
в этом запросе выводиться данные 1 пользователя
как сделать чтоб выводилось имя друга .. а у того кто добавил имя 1
вопрос сложный
Спустя 52 минуты, 19 секунд (16.12.2009 - 21:48) Vladimir_lg написал(а):
Цитата |
после этого нужно вывести всех друзей. ... |
чьих? того кто добавлял друга (1) или того, кого добавили(2)?
Цитата |
как сделать чтоб выводилось имя друга .. а у того кто добавил имя 1 |
ты все это хочешь в одном запросе сделать,т.е. чтоб получить строку в которой будет и имя друга и имя того кто добавлял?
поле userid есть только в friends и его нет в users?
Цитата |
в этом запросе выводиться данные 1 пользователя |
данные одного или первого пользователя?
Спустя 6 минут, 41 секунда (16.12.2009 - 21:54) steep написал(а):
чтоб у id -2 выводило данные id-1
а у id-1 наоборот
в users поле id
а у id-1 наоборот
в users поле id
Спустя 1 минута, 28 секунд (16.12.2009 - 21:56) steep написал(а):
там такая проблема что у одного из пользователей (id-1 или id-2)
выводиться не та информация
выводиться не та информация
Спустя 38 минут (16.12.2009 - 22:34) VolCh написал(а):
По-моему, очевидное решение - делать два запроса (можно объединить в один с помощью UNION), сначала "пробить" тех, кого юзер сам добавлял, потом тех, кто юзера добавил.
Ещё можно дублировать информацию при подтверждении запроса (то есть не только статус менять, но и вставлять еще одну запись с "зеркальными" id)
Я бы второе выбрал, выборка друзей наверняка будет производиться на порядки чаще, чем добавление
Ещё можно дублировать информацию при подтверждении запроса (то есть не только статус менять, но и вставлять еще одну запись с "зеркальными" id)
Я бы второе выбрал, выборка друзей наверняка будет производиться на порядки чаще, чем добавление
Спустя 13 минут, 42 секунды (16.12.2009 - 22:48) Vladimir_lg написал(а):
что то не совсем понимаю. используя такую связку можно получить список друзей указанного пользователя
данные определенного своего друга
посмотреть всех кто добавлял пользователя 2
посмотреть данные определенного пользователя добавившего в друзья
хотя смысл последнего теряется. ведь получив userid добавившего по нему можно вытащить данные из users
SELECT f.userid, f.friendid as id,f.status, u.username AS name, u.class,u.ip, u.avatar,u.nick,u.family, u.title, u.donor, u.warned, u.enabled,u.added,u.sex, u.last_access
FROM friends AS f JOIN users as u ON f.friendid = u.id
where f.userid=1
данные определенного своего друга
SELECT f.userid, f.friendid as id,f.status, u.username AS name, u.class,u.ip, u.avatar,u.nick,u.family, u.title, u.donor, u.warned, u.enabled,u.added,u.sex, u.last_access
FROM friends AS f JOIN users as u ON f.friendid = u.id
where f.userid=1 and id = 2
посмотреть всех кто добавлял пользователя 2
SELECT f.userid, f.friendid as id,f.status, u.username AS name, u.class,u.ip, u.avatar,u.nick,u.family, u.title, u.donor, u.warned, u.enabled,u.added,u.sex, u.last_access
FROM friends AS f JOIN users as u ON f.userid = u.id
where f.friendid=2
посмотреть данные определенного пользователя добавившего в друзья
SELECT f.userid, f.friendid as id,f.status, u.username AS name, u.class,u.ip, u.avatar,u.nick,u.family, u.title, u.donor, u.warned, u.enabled,u.added,u.sex, u.last_access
FROM friends AS f JOIN users as u ON f.userid = u.id
where f.friendid=2 and userid=1
хотя смысл последнего теряется. ведь получив userid добавившего по нему можно вытащить данные из users
Спустя 1 час, 20 минут, 22 секунды (17.12.2009 - 00:08) VolCh написал(а):
Цитата |
что то не совсем понимаю. используя такую связку можно получить список друзей указанного пользователяSELECT f.userid, f.friendid as id,f.status, u.username AS name, u.class,u.ip, u.avatar,u.nick,u.family, u.title, u.donor, u.warned, u.enabled,u.added,u.sex, u.last_access |
так ты получишь не всех друзей юзера, а тех, кого юзер добавил себе в друзья (те, кто сам его добавил, а юзер только подтвердил не попадут в выборку)
Спустя 13 часов, 15 минут, 45 секунд (17.12.2009 - 13:24) Vladimir_lg написал(а):
Цитата |
Цитата что то не совсем понимаю. используя такую связку можно получить список друзей указанного пользователя SELECT f.userid, f.friendid as id,f.status, u.username AS name, u.class,u.ip, u.avatar,u.nick,u.family, u.title, u.donor, u.warned, u.enabled,u.added,u.sex, u.last_access FROM friends AS f JOIN users as u ON f.friendid = u.id where f.userid=1 так ты получишь не всех друзей юзера, а тех, кого юзер добавил себе в друзья (те, кто сам его добавил, а юзер только подтвердил не попадут в выборку) |
да. так и будет. но в системе надо вводить зеркалирование, при подтверждении как ты и предлагал. тогда будет показано как надо. а иначе получиться что кто-то надобавлял себе людей в друзья они его таковым не считают, что вполне логично.
Спустя 5 часов, 51 минута, 49 секунд (17.12.2009 - 19:15) steep написал(а):
спасиб ребят щас попробую зеркальный способ
Спустя 16 минут, 51 секунда (17.12.2009 - 19:32) steep написал(а):
$res = sql_query("SELECT f.status, u.id,f.status, u.username AS name, u.class,u.ip, u.avatar,u.nick,u.family, u.title, u.donor, u.warned, u.enabled,u.added,u.sex, u.last_access
FROM friends AS f JOIN users as u ON f.userid = u.id WHERE f.status='1' AND (friendid=".$userid.")
UNION
SELECT f.status, u.id,f.status, u.username AS name, u.class,u.ip, u.avatar,u.nick,u.family, u.title, u.donor, u.warned, u.enabled,u.added,u.sex, u.last_access
FROM friends AS f JOIN users as u ON f.friendid = u.id WHERE f.status='1' AND userid=".$userid."
", false) or sqlerr(__FILE__, __LINE__);
вот так все правильно показывает! я в sql плохо если есть какие то недочеты говорите