[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Запрос с двумя разными параметрами
xxxLOGIATxxx
Собсно, у нас таблица messages и такой запрос:

$query = $database->database_query("SELECT * FROM messages WHERE message_owneruser_id='1' AND message_authoruser_id='2'  ORDER BY message_date");


Получаем сообщения для первого пользователя от второго пользователя. Как построить правильный запрос, который отобразит не только сообщения второго пользователя первому, но и сообщения первого второму? Тоесть, нужна история переписки.

Что-то связанное с INNER JOIN, но я его ещё не понимаю, ни разу не сталкивался. Мне бы хотя бы парочку внятных примеров.



Спустя 9 минут, 43 секунды (18.09.2011 - 09:52) alex12060 написал(а):
Тут нужно объединение, типа left join
Мне лень писать тебе пример, просто, почитай про принцип..

Спустя 4 минуты, 37 секунд (18.09.2011 - 09:56) xxxLOGIATxxx написал(а):
Цитата (alex12060 @ 18.09.2011 - 06:52)
Тут нужно объединение, типа left join
Мне лень писать тебе пример, просто, почитай про принцип..

Это ведь обьединение двух таблиц в одну, а мне нужен вывод данных из одной таблицы но с разными параметрами. Как вариант, можно сделать два запроса, но я сомневаюсь что это лучший вариант

Спустя 2 минуты, 46 секунд (18.09.2011 - 09:59) alex12060 написал(а):
Тогда UNION SELECT

Спустя 3 минуты, 47 секунд (18.09.2011 - 10:03) xxxLOGIATxxx написал(а):
Цитата (alex12060 @ 18.09.2011 - 06:59)
Тогда UNION SELECT

Спасибо, дружище

Вот пример:
$query = $database->database_query("

SELECT * FROM se_messages WHERE message_owneruser_id='3' AND message_authoruser_id='1'

UNION

SELECT * FROM se_messages WHERE message_owneruser_id='1' AND message_authoruser_id='3'

ORDER BY message_date"
);

Спустя 50 секунд (18.09.2011 - 10:04) alex12060 написал(а):
Я уверен, что есть более элегантное решение, но я не смогу щас сообразить..

Спустя 11 минут, 30 секунд (18.09.2011 - 10:15) ZSH написал(а):
SELECT * FROM se_messages

WHERE (message_owneruser_id='3' AND message_authoruser_id='1')

OR (message_owneruser_id='1' AND message_authoruser_id='3')

ORDER BY message_date;

попробуй так еще.

Спустя 1 час, 27 минут, 7 секунд (18.09.2011 - 11:42) xxxLOGIATxxx написал(а):
Цитата (ZSH @ 18.09.2011 - 07:15)
SELECT * FROM se_messages

WHERE (message_owneruser_id='3' AND message_authoruser_id='1')

OR (message_owneruser_id='1' AND message_authoruser_id='3')

ORDER BY message_date;

попробуй так еще.

Точняк, по моему самый верный и компактный вариант

Спустя 4 минуты, 45 секунд (18.09.2011 - 11:47) ZSH написал(а):
только индексы по полям поставить не забудь, а то при большом количестве записей тормоза будут.

Спустя 4 минуты, 40 секунд (18.09.2011 - 11:52) xxxLOGIATxxx написал(а):
Цитата (ZSH @ 18.09.2011 - 08:47)
только индексы по полям поставить не забудь, а то при большом количестве записей тормоза будут.

Ща расставлю, спасибо

Спустя 1 час, 22 минуты, 8 секунд (18.09.2011 - 13:14) inpost написал(а):
WHERE message_owneruser_id IN (1,3) AND message_authoruser_id IN (1,3)

Спустя 6 минут, 30 секунд (18.09.2011 - 13:20) ZSH написал(а):
inpost
Цитата
WHERE message_owneruser_id IN (1,3) AND message_authoruser_id IN (1,3)

а не будет проводится лишних сравнений типа:
message_owneruser_id='1' AND message_authoruser_id='1'
message_owneruser_id='3' AND message_authoruser_id='3'
я в MySQL не силен, просто интересно

Спустя 2 минуты, 59 секунд (18.09.2011 - 13:23) inpost написал(а):
ZSH
Будет, но не будет же человек сам себе писать. А насчет производительности, то тут только тестировать, что быстрее в итоге получится.

Спустя 3 минуты, 2 секунды (18.09.2011 - 13:26) ZSH написал(а):
Цитата
Будет, но не будет же человек сам себе писать.

это понятно, но сравнивать поля мускул будет.
Цитата
А насчет производительности, то тут только тестировать, что быстрее в итоге получится.

согласен.

Спустя 1 минута, 9 секунд (18.09.2011 - 13:27) inpost написал(а):
Вот ещё альтернатива самая оптимальная:
структура БД:
user1,user2,whosend
Скрипт сделать так, чтобы user1 всегда был меньше user2. И тогда
WHERE user1 = 1 AND user2 = 3

Спустя 2 часа, 26 секунд (18.09.2011 - 15:28) vital написал(а):
"SELECT * FROM messages WHERE (message_owneruser_id='1' AND message_authoruser_id='2') OR (message_owneruser_id='2' AND message_authoruser_id='1')

так без лишних сравнений.
Быстрый ответ:

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