$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 попробуй так еще. |
Точняк, по моему самый верный и компактный вариант
Спустя 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
структура БД:
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')
так без лишних сравнений.
так без лишних сравнений.