Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Выбока из 2-х таблиц с условием и сортировкой по дате
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Выбока из 2-х таблиц с условием и сортировкой по дате

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

1. Kubert - 18 Августа, 2017 - 19:53:02 - перейти к сообщению
Есть 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.                                 *----------------------*
2. MouseZver - 18 Августа, 2017 - 20:04:59 - перейти к сообщению
покажи свою наработку запроса
3. Kubert - 18 Августа, 2017 - 20:12:48 - перейти к сообщению
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 будет некоректный...
4. LIME - 20 Августа, 2017 - 11:25:54 - перейти к сообщению
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 сортировать
раньше муцкуль прощал такую вольность
теперь решил делать как все
не группируй
если не надо повторений то дистинкт
группировка надо если надо агрегировать

 

Powered by ExBB FM 1.0 RC1