есть две таблицы: user (id,name) где name=имя пользователя и friend (user1,user2) где user1=id одного пользователя, user2=id второго пользователя из таблицы friend где user1=мой ID либо user2=мой ID нужно выбрать второй ID (т.е. если user1=мойID, то нужен user2 и наоборот), а потом связать с таблицей user, чтобы добавилась колонка name для выбранных ID. пример: таблица USER: id=1 name=Я (по нему и фильтруем) id=2 name=Иван id=3 name=Петя таблица FRIEND: user1=1 user2=2 user1=3 user2=1 user1=2 user2=3 Результат: user1=1 user2=2 name=Иван user1=3 user2=1 name=Петя пишу сейчас через JOIN, но что-то задумался, у меня же две колонки name будут в результате тогда... и для меня и для второго юсера? $qwer="SELECT friend.*,user.name FROM friend LEFT JOIN user ON (friend.user1=user.id) OR (friend.user2=user.id) WHERE (friend.user1='".mysql_real_escape_string($userid)."') OR (friend.user2='".mysql_real_escape_string($userid)."')"; $res=mysql_query($qwer,$db) or die(mysql_error()); могу, конечно, двумя запросами, но хочется одним... Помогите?
Но потом при обработке результата мне нужно будет как-то узнать имя от id, которое находится в USER2 (это если мой ID в USER1) и в USER1 (это если мой ID в USER2) А вообще в $row["user.name"] я что получу тогда?
а с помощью AS я могу как-то переименовать колонку NAME в случае если мой ID в USER1 - то имя будет, например NAME1, а в противном случае NAME2 чёто я совсем запутался похоже
$qwer="SELECT friend.*,user.name FROM friend LEFT JOIN user ON (friend.user2=user.id)or(friend.user1=user.id) WHERE (friend.user1='".mysql_real_escape_string($userid)."') OR (friend.user2='".mysql_real_escape_string($userid)."')"; Сделал вот так, всё работает, при переборе результата в $row["name"] именно ИМЯ нужного юсера, а не моё. Не совсем понял логики..., но работает... igordata, СПАСИБО!!! Добавлено спустя 10 минут 11 секунд: А не, нифига... В каких-то случаях своё имя выдаёт...
я не понимаю, ты хочешь друзей их обоих выбрать? Добавлено спустя 2 минуты 51 секунду: да, точно, косяк у меня. Код (Text): SELECT * WHERE `user1`=$id OR `user2`=$id выберет всех друзей человека $id т.е. в одном поле будет всегда $id, а во втором номер друга...
ID то я потом при обработке результата запроса могу получить и свой и друга. А нужно получить ИМЯ друга, которое находится в USER.name А после такого запроса в row["name"] находится либо моё имя, либо имя друга, похоже, зависит от того, чей ID находится в friend.user2 Но вся фишка в том, что ID друга может находится как в поле friend.user1 , так и в friend.user2 (зависит от того, кто первый заявку о дружбе подал)
тогда на ум приходят только два запроса. Код (Text): SELECT `user2` AS `u` FROM `friends` WHERE `user1` = $id UNION SELECT `user1` AS `u` FROM `friends` WHERE `user2` = $id
Блин, поччему я раньше про UNION не знал? )) Сделал, работает как часы! igordata, теперь уж точно СПАСИБО!