За последние 24 часа нас посетил 36921 программист и 1670 роботов. Сейчас ищут 880 программистов ...

Запросом из двух таблиц ID ТОЛЬКО одной из колонок

Тема в разделе "MySQL", создана пользователем Perez, 29 июн 2012.

  1. Perez

    Perez Активный пользователь

    С нами с:
    24 апр 2012
    Сообщения:
    22
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    есть две таблицы:
    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());

    могу, конечно, двумя запросами, но хочется одним... Помогите?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Select * where user1=$id od user2=$id

    в чем затык?
     
  3. Perez

    Perez Активный пользователь

    С нами с:
    24 апр 2012
    Сообщения:
    22
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Но потом при обработке результата мне нужно будет как-то узнать имя от id, которое находится в USER2 (это если мой ID в USER1) и в USER1 (это если мой ID в USER2)

    А вообще в $row["user.name"] я что получу тогда?
     
  4. Perez

    Perez Активный пользователь

    С нами с:
    24 апр 2012
    Сообщения:
    22
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    а с помощью AS я могу как-то переименовать колонку NAME в случае если мой ID в USER1 - то имя будет, например NAME1, а в противном случае NAME2
    чёто я совсем запутался похоже :)
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    чем тебе мною предложенный вариант не подходит?
     
  6. Perez

    Perez Активный пользователь

    С нами с:
    24 апр 2012
    Сообщения:
    22
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    $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 секунд:
    А не, нифига... В каких-то случаях своё имя выдаёт...
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я не понимаю, ты хочешь друзей их обоих выбрать?

    Добавлено спустя 2 минуты 51 секунду:
    да, точно, косяк у меня.

    Код (Text):
    1. SELECT * WHERE `user1`=$id OR `user2`=$id
    выберет всех друзей человека $id
    т.е. в одном поле будет всегда $id, а во втором номер друга...
     
  8. Perez

    Perez Активный пользователь

    С нами с:
    24 апр 2012
    Сообщения:
    22
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    ID то я потом при обработке результата запроса могу получить и свой и друга. А нужно получить ИМЯ друга, которое находится в USER.name
    А после такого запроса в row["name"] находится либо моё имя, либо имя друга, похоже, зависит от того, чей ID находится в friend.user2
    Но вся фишка в том, что ID друга может находится как в поле friend.user1 , так и в friend.user2 (зависит от того, кто первый заявку о дружбе подал)
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    тогда на ум приходят только два запроса.
    Код (Text):
    1. SELECT `user2` AS `u` FROM `friends` WHERE `user1` = $id
    2. UNION
    3. SELECT `user1` AS `u` FROM `friends` WHERE `user2` = $id
     
  10. Perez

    Perez Активный пользователь

    С нами с:
    24 апр 2012
    Сообщения:
    22
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Блин, поччему я раньше про UNION не знал? :)))
    Сделал, работает как часы!
    igordata, теперь уж точно СПАСИБО! :)