PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Telnet
Отправлено: 19 Марта, 2018 - 18:25:14
Post Id


Частый гость


Покинул форум
Сообщений всего: 215
Дата рег-ции: Май 2011  


Помог: 1 раз(а)




Есть такая таблица
http://prntscr[dot]com/itcugr

Как составить запрос так что б он показал только последние сообщения от и к пользователю с user_id = 44
что б на выходе остались записи с id 8,6,3,2
 
 Top
Telnet
Отправлено: 20 Марта, 2018 - 13:02:55
Post Id


Частый гость


Покинул форум
Сообщений всего: 215
Дата рег-ции: Май 2011  


Помог: 1 раз(а)




Я таки сделал не знаю правильно или можно было как то сократить
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT t1.* FROM userMessage AS t1, userMessage AS t2
  3. WHERE  t1.created IN (SELECT max(t2.created) FROM userMessage AS t2
  4. WHERE t2.to_user_id = 44 OR t2.from_user_id = 44 GROUP BY t2.to_user_id, t2.from_user_id)
  5. AND t1.to_user_id IN (SELECT t2.to_user_id FROM userMessage AS t2
  6. WHERE t2.to_user_id = 44 OR t2.from_user_id = 44 GROUP BY t2.to_user_id, t2.from_user_id)
  7. AND t1.from_user_id IN (SELECT t2.from_user_id FROM userMessage AS t2
  8. WHERE t2.to_user_id = 44 OR t2.from_user_id = 44 GROUP BY t2.to_user_id, t2.from_user_id)
  9. GROUP BY t1.id  ORDER BY `t1`.`created` DESC
  10.  

Если у кого есть идеи как сделать лучше пишите
 
 Top
Vladimir Kheifets
Отправлено: 20 Марта, 2018 - 18:48:17
Post Id



Посетитель


Покинул форум
Сообщений всего: 287
Дата рег-ции: Март 2017  
Откуда: Германия, Бавария


Помог: 9 раз(а)




Telnet пишет:
Я таки сделал не знаю правильно или можно было как то сократить
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT t1.* FROM userMessage AS t1, userMessage AS t2
  3. WHERE  t1.created IN (SELECT max(t2.created) FROM userMessage AS t2
  4. WHERE t2.to_user_id = 44 OR t2.from_user_id = 44 GROUP BY t2.to_user_id, t2.from_user_id)
  5. AND t1.to_user_id IN (SELECT t2.to_user_id FROM userMessage AS t2
  6. WHERE t2.to_user_id = 44 OR t2.from_user_id = 44 GROUP BY t2.to_user_id, t2.from_user_id)
  7. AND t1.from_user_id IN (SELECT t2.from_user_id FROM userMessage AS t2
  8. WHERE t2.to_user_id = 44 OR t2.from_user_id = 44 GROUP BY t2.to_user_id, t2.from_user_id)
  9. GROUP BY t1.id  ORDER BY `t1`.`created` DESC
  10.  

Если у кого есть идеи как сделать лучше пишите

Добрый день!
У меня была примерно такая же идея с .... IN (SELECT max(created)....
Попробовал в phpMyAdmin на одной таблице, в которой более 30000 строк и 23 столбца, один из которых типа “date”.
Результата не дождался... Может Вам повезёт.
Удачи!
 
 Top
Telnet
Отправлено: 21 Марта, 2018 - 12:50:26
Post Id


Частый гость


Покинул форум
Сообщений всего: 215
Дата рег-ции: Май 2011  


Помог: 1 раз(а)




Цитата:

Добрый день!
У меня была примерно такая же идея с .... IN (SELECT max(created)....
Попробовал в phpMyAdmin на одной таблице, в которой более 30000 строк и 23 столбца, один из которых типа “date”.
Результата не дождался... Может Вам повезёт.
Удачи!

Спасибо за совет я переписал вот так а потом уже по результату прохожу в цикле и выбираю нужные строки
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT to_user_id, from_user_id, max(created) AS created FROM userMessage WHERE to_user_id = :user_id OR FROM_user_id = :user_id GROUP BY to_user_id, from_user_id ORDER BY created DESC
  3.  


Этот выполнился в 3 раза быстрее

(Отредактировано автором: 21 Марта, 2018 - 12:55:09)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB