[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с запросом
steep
В общем всем приввет biggrin.gif

Хочу написать модуль к своему сайту "Мои друзья" ...

так вот ...
если пользователь с 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



Спустя 1 минута, 28 секунд (16.12.2009 - 21:56) steep написал(а):
там такая проблема что у одного из пользователей (id-1 или id-2)
выводиться не та информация

Спустя 38 минут (16.12.2009 - 22:34) VolCh написал(а):
По-моему, очевидное решение - делать два запроса (можно объединить в один с помощью UNION), сначала "пробить" тех, кого юзер сам добавлял, потом тех, кто юзера добавил.

Ещё можно дублировать информацию при подтверждении запроса (то есть не только статус менять, но и вставлять еще одну запись с "зеркальными" id)

Я бы второе выбрал, выборка друзей наверняка будет производиться на порядки чаще, чем добавление

Спустя 13 минут, 42 секунды (16.12.2009 - 22:48) 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


данные определенного своего друга
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 
FROM friends AS f JOIN users as u ON f.friendid = u.id
where f.userid=1



так ты получишь не всех друзей юзера, а тех, кого юзер добавил себе в друзья (те, кто сам его добавил, а юзер только подтвердил не попадут в выборку)

Спустя 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 написал(а):
спасиб ребят щас попробую зеркальный способ biggrin.gif

Спустя 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 плохо если есть какие то недочеты говорите biggrin.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.