За последние 24 часа нас посетили 17186 программистов и 1651 робот. Сейчас ищут 1139 программистов ...

Сообщения между пользователями.

Тема в разделе "PHP для новичков", создана пользователем Salvat, 5 мар 2016.

  1. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    igordata, я к тому, что это join.
     
  2. Period

    Period Новичок

    С нами с:
    29 дек 2014
    Сообщения:
    148
    Симпатии:
    1
    Я ни разу за всю жизнь не пользовался этим соединением, поэтому могу и ошибаться. Но насколько я понимаю, эквивалентности тут нет.
    Я могу написать, условно говоря, FROM tab1, tab2 WHERE tab1.id = tab2.id + 5 или ещё хуже FROM tab1, tab2 WHERE ( tab1.id = tab2.id + 5 ) OR ( tab1.id = tab2.id * 10 ) - несколько условий.

    Пройдёт ли такой вариант с джоином? ON tab1.id = tab2.id + 5.

    В случае с джоином есть простор для хоть какой-то внутренней оптимизации, кэширования, тут его нет вообще.

    Т.е. там можно сделать сначала WHERE для каждой таблицы, а потом уже объединять результаты по ON, сильно сократив результирующую таблицу. А тут как определить, где условие объединения, а где просто условия? Какой-то совсем интеллектуальный механизм. Возможно он и есть, я в общем-то не специалист по базам данных.

    В любом случае, я ни в одном проекте не встречал такого объединения. Почему-то не пользуются.
     
  3. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Это и есть JOIN. Просто слово JOIN там не упоминается.
    Это уже будет соединение по равенству.

    Добавлено спустя 4 минуты 33 секунды:
    я тоже не специалист по базам.
     
  4. Salvat

    Salvat Новичок

    С нами с:
    4 мар 2016
    Сообщения:
    101
    Симпатии:
    0
    Period, вот именно это мне и необходимо было, что-то не подумал о таком варианте. Спасибо. И всем остальным тоже;)
     
  5. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    Не за что. Ты ведь не решил задачу )))

    Salvat, ты превращаешь программирование в карго-культ: занимаешся имитацией рабочего процесса вместо осознанного достижения цели.

    Что я тебе писал про два экземпляра users, ты не понял. Выводишь данные только одного пользователя-отправителя. Сомнения насчет выбора И и ИЛИ ты отбросил, просто перестал ограничивать список вообще. Это и есть решение? ))) Что-то выводится, значит это победа!
     
  6. Salvat

    Salvat Новичок

    С нами с:
    4 мар 2016
    Сообщения:
    101
    Симпатии:
    0
    Выводится абсолютно все как и необходимо, и стабильно. В первом посте была написана проблема, потом от нее уже началась другая пляска по поводу двух таблиц.
     
  7. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    Жаль тебя расстраивать. Но всё даже хуже, чем показалось на первый взгляд. Забирать из базы всё и потом фильтровать в PHP это даже не на двойку, это на минус два. Фильтр должен быть в самом запросе через WHERE.

    К тому же, "диалог между пользователями" это когда пишет то Саша Маше, то Маша Саше. А твоё условие (в PHP) оставляет только один из вариантов. Ты этого не заметил, поэтому не понял зачем присоединять два экземпляра users.

    Я бы посоветовал тебе начать всё с нуля. Сначала расписать желаемый результат, потом добиваться его, не подстраивая на ходу условия под свои ошибки.
     
  8. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.250
    Адрес:
    там-сям
    Правильный вариант фильтра для диалога:
    Код (PHP):
    1. (from_u = :id1 AND to_u = :id2) OR (from_u = :id2 AND to_u = :id1)