Доброго времени суток. Какая-то чертовщина творится)) вот такой кусок кода Код (Text): $time = time(); $aColumns[] = "$t.date IN (SELECT MAX($t.date) FROM $t WHERE $t.date<=$time AND $t.feature=1 GROUP BY $t.fnomer)"; $aOptions['order'] = "$t.fnomer ASC, $t.date DESC"; Популярные новости группируются по номеру и сортируется по дате. limit = 5 выглядит это так : Новость номер 1 (самая свежая дата), Новость номер 2 (самая свежая дата) ... и так далее до 5. и вот всё работает как надо, до вчерашнего дня)) вот каким-то боком проскакивает новости с одинаковыми номерами выглядит это так: Новость номер 1 (самая свежая дата), Новость номер 1 (вторая по свежести дата)) ), Новость номер 2 (самая свежая дата), Новость номер 3 (самая свежая дата).... и тд как так я понять не могу, вроде не должно такого быть?
@justc, наверное, "вторая по свежести" дата для первой новости совпадает с одной из "самых свежих" дат остальных четырёх новостей. Следовательно, надо проверять не столько соответствие даты набору из подзапроса в строке номер 2. --- Добавлено --- Сделайте схемку с тестовыми данными на DB-Fiddle.
@justc, вот вариант. На случай, если выборку надо делать по паре [№, дата]. Спойлер Код (SQL): SELECT t.`name`, t.`nomer`, t.`date` FROM test AS t JOIN (SELECT MAX(`date`) AS maxdate, nomer FROM test GROUP BY nomer) AS sq ON t.`nomer` = sq.`nomer` AND t.`date` = sq.`maxdate` ORDER BY t.`nomer`, t.`date` DESC;
@Sail а если в $aColumns[] у меня уже критерии (WHERE) то есть мне нужно два критерия задать (1 AND 2)? с JOIN вообще не шарю, его же туда не получится? а так смысла нет? : Код (Text): $aColumns[] = "$t.date IN ( SELECT t.`date` FROM test AS t JOIN (SELECT MAX(`date`) AS maxdate, nomer FROM test GROUP BY nomer) AS sq ON t.`nomer` = sq.`nomer` AND t.`date` = sq.`maxdate` ORDER BY t.`nomer`, t.`date` DESC; )";
@justc, какую-то ORM используете, или QueryBuilder из какого фреймворка? У них есть свои способы выполнять объединения и строить подзапросы. Про объединение таблиц: 8 способов объединения (JOIN) таблиц в SQL Явные операции объединения
@Sail, ага, QueryBuilder из старого неизвестного фреймворка ну ок, подправил QueryBuilder, теперь могу JOIN вставлять до WHERE Код (Text): $aOptions['join'] = " JOIN (SELECT MAX(`date`) AS maxdate, nomer FROM test GROUP BY nomer) AS sq ON t.`nomer` = sq.`nomer` AND t.`date` = sq.`maxdate` "; $aOptions['order'] = "$t.fnomer ASC, $t.date DESC"; и вроде правильно, но второй номер пропущен)) вывелось 4 новости, вместо 5 ps это еще без новости с одинаковой датой и тп --- Добавлено --- пардон, добавил where с нужными критериями в подзапрос и завелось как надо! --- Добавлено --- ну, вроде всё! тестирую с новостью с одинаковой датой, с join пашет как надо! @Sail спасибище !!