Я ни разу за всю жизнь не пользовался этим соединением, поэтому могу и ошибаться. Но насколько я понимаю, эквивалентности тут нет. Я могу написать, условно говоря, 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, сильно сократив результирующую таблицу. А тут как определить, где условие объединения, а где просто условия? Какой-то совсем интеллектуальный механизм. Возможно он и есть, я в общем-то не специалист по базам данных. В любом случае, я ни в одном проекте не встречал такого объединения. Почему-то не пользуются.
Это и есть JOIN. Просто слово JOIN там не упоминается. Это уже будет соединение по равенству. Добавлено спустя 4 минуты 33 секунды: я тоже не специалист по базам.
Period, вот именно это мне и необходимо было, что-то не подумал о таком варианте. Спасибо. И всем остальным тоже
Не за что. Ты ведь не решил задачу ))) Salvat, ты превращаешь программирование в карго-культ: занимаешся имитацией рабочего процесса вместо осознанного достижения цели. Что я тебе писал про два экземпляра users, ты не понял. Выводишь данные только одного пользователя-отправителя. Сомнения насчет выбора И и ИЛИ ты отбросил, просто перестал ограничивать список вообще. Это и есть решение? ))) Что-то выводится, значит это победа!
Выводится абсолютно все как и необходимо, и стабильно. В первом посте была написана проблема, потом от нее уже началась другая пляска по поводу двух таблиц.
Жаль тебя расстраивать. Но всё даже хуже, чем показалось на первый взгляд. Забирать из базы всё и потом фильтровать в PHP это даже не на двойку, это на минус два. Фильтр должен быть в самом запросе через WHERE. К тому же, "диалог между пользователями" это когда пишет то Саша Маше, то Маша Саше. А твоё условие (в PHP) оставляет только один из вариантов. Ты этого не заметил, поэтому не понял зачем присоединять два экземпляра users. Я бы посоветовал тебе начать всё с нуля. Сначала расписать желаемый результат, потом добиваться его, не подстраивая на ходу условия под свои ошибки.
Правильный вариант фильтра для диалога: Код (PHP): (from_u = :id1 AND to_u = :id2) OR (from_u = :id2 AND to_u = :id1)