PHP.SU

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


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

> Без описания
Kubert
Отправлено: 18 Августа, 2017 - 19:53:02
Post Id



Частый гость


Покинул форум
Сообщений всего: 186
Дата рег-ции: Февр. 2010  


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




Есть 2 таблицы (рисунок ниже).
Задача такая:
- Необходимо получить уникальные значения id3 (из 1-ой таб.).
- С условием на id4 (WHERE = 1) (из 2-ой таб.).
- Сортировка по date (из 2-ой таб.).
- Иметь возможность задавать LIMIT на полученные id3, для последующей постраничной навигации.

*** Кучу всего перенаписал, прихожу к ошибкам на GROUP BY, голова уже кипит, вроде все ж элементарно, но не выходит. Посоветуйте решением. Спасибо! ***

CODE (htmlphp):
скопировать код в буфер обмена
  1. t1                              t2
  2. *-----------------*             *----------------------*
  3. |  id1|  id2|  id3|             |  id4|  id2|      date|
  4. |-----------------|             |----------------------|
  5. |    1|   21|  103|             |    1|   21|2017-02-09|
  6. |    2|   34|  204|             |    1|   34|2017-04-12|
  7. |    3|   56|  506|             |    2|   34|2017-01-28|
  8. |    4|   78|  708|             |    3|   21|2017-11-11|
  9. |    5|   90|  950|             |    2|   34|2017-05-02|
  10. |  ...|  ...|  ...|             |    4|   34|2017-04-25|
  11. *-----------------*             |    1|   34|2017-04-25|
  12.                                 |  ...|  ...|       ...|
  13.                                 *----------------------*
 
 Top
MouseZver
Отправлено: 18 Августа, 2017 - 20:04:59
Post Id



Новичок


Покинул форум
Сообщений всего: 43
Дата рег-ции: Июнь 2017  
Откуда: php.ru


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




покажи свою наработку запроса
 
 Top
Kubert
Отправлено: 18 Августа, 2017 - 20:12:48
Post Id



Частый гость


Покинул форум
Сообщений всего: 186
Дата рег-ции: Февр. 2010  


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




MouseZver пишет:
покажи свою наработку запроса


Вот один из вариантов...

SELECT
t1.id3
FROM
t1
LEFT JOIN
t2 ON t2.id2 = t1.id2
WHERE
t1.id3 IS NOT NULL
GROUP BY
t1.id3
-- ORDER BY
-- t2.date DESC

Если раскоментить сортировку, то ничего не работает. Если закоментить группировку, а сортировку раскоментить, то вылезают дубликаты id3, а в таком случае LIMIT будет некоректный...
 
 Top
LIME
Отправлено: 20 Августа, 2017 - 11:25:54
Post Id



Активный участник


Покинул форум
Сообщений всего: 9990
Дата рег-ции: Нояб. 2010  


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




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT DISTINCT t1.id3 FROM t1
  2. LEFT JOIN t2 ON t2.id2 = t1.id2
  3. WHERE t1.id3 IS NOT NULL
  4. ORDER BY t2.date DESC
не стал вникать
тупое решение в лоб
(Добавление)
еще раз посмотрел...усмехнулся про себя и написал:
чтоб не фэйлила группировка на mysql >= 5.7 надо либо привыкать писать запросы как все нормальные люди либо переключить sql_mode в режим 5.6
как это делать думаю сам нагуглишь
а вот как запросы писать подскажу
дело в том что если ты группируешь по id3 то субд не знает по какому из нескольких значений date для одного и того же id3 сортировать
раньше муцкуль прощал такую вольность
теперь решил делать как все
не группируй
если не надо повторений то дистинкт
группировка надо если надо агрегировать

(Отредактировано автором: 20 Августа, 2017 - 11:29:26)



-----
вау
я кажется понял жастЮзера!!!
 
 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