mysql — Access DB: предложение TOP и вложенные запросы + PHP Paging

Я разрабатываю интерфейс PHP, чтобы показать некоторые результаты из двух разных баз данных: MySQL (.sql) и Access один (.mdb). Когда я запрашиваю результаты, я позволяю пользователю выбрать, сколько из них он хочет перечислить, чтобы я мог ограничить и пролистать их с помощью некоторого удовольствия от PHP.
Это безупречно работает для БД MySQL, где ПРЕДЕЛ пункт делает все аккуратно. БД Access — это другой разговор: у Access нет предложения LIMIT, так что я должен использовать ТОП пункт. Жаль, что это делает боль в спине.
Я нашел хороший пример в принятом ответе на этот вопрос, но у меня проблема. Прежде всего, позвольте мне показать вам несколько запросов фрагмента:

QUERY # 1

SELECT TOP 5 *
FROM `Table_1` INNER JOIN `Table_2`
ON `Table_1`.`Some_ID` = `Table_2`.`Some_ID`
AND `Table_1`.`Timestamp` = `Table_2`.`Timestamp`
WHERE `Table_1`.`Some_ID` LIKE 'ID %' AND `Table_1`.`Timestamp` LIKE '2018/03/20 %';

QUERY # 2

SELECT TOP 5 *
FROM `Table_1` INNER JOIN `Table_2`
ON `Table_1`.`Some_ID` = `Table_2`.`Some_ID`
AND `Table_1`.`Timestamp` = `Table_2`.`Timestamp`
WHERE `Table_1`.`Some_ID` LIKE 'ID %' AND `Table_1`.`Timestamp` LIKE '2018/03/20 %'
ORDER BY `Table_1`.`Some_ID`;

Запрос № 1 показывает мне только первые 5 результатов, как и просили.
Жаль, что когда я добавляю СОРТИРОВАТЬ ПО пункт, Запрос № 2 возвращает мне ВСЕ результаты, удовлетворяющие моим условиям.

То же самое не происходит с запросом MySQL как это:

QUERY # 3

SELECT *
FROM `Table_1` INNER JOIN `Table_2`
ON `Table_1`.`Some_ID` = `Table_2`.`Some_ID`
AND `Table_1`.`Timestamp` = `Table_2`.`Timestamp`
WHERE `Table_1`.`Some_ID` LIKE 'ID %' AND `Table_1`.`Timestamp` LIKE '2018/03/20 %'
ORDER BY `Table_1`.`Some_ID`
LIMIT 0, 5;

Итак, я делаю что-то не так с моим запросом Access?
Чтобы завершить мой вопрос, вот как должен выглядеть мой последний запрос Access (я немного изменил предложенный в вышеупомянутой теме):

QUERY # 4

SELECT *
FROM `Table_1` INNER JOIN `Table_2`
ON `Table_1`.`Some_ID` = `Table_2`.`Some_ID`
AND `Table_1`.`Timestamp` = `Table_2`.`Timestamp`
WHERE EXISTS (
SELECT TOP 5 * FROM (
SELECT TOP 10 *
FROM `Table_1` INNER JOIN `Table_2`
ON `Table_1`.`Some_ID` = `Table_2`.`Some_ID`
AND `Table_1`.`Timestamp` = `Table_2`.`Timestamp`
WHERE `Table_1`.`Some_ID` LIKE 'ID %' AND `Table_1`.`Timestamp` LIKE '2018/03/20 %')
ORDER BY `Table_1`.`Some_ID` DESC)
ORDER BY `Table_1`.`Some_ID` ASC;

1

Решение

Наконец мне удалось решить мою проблему. Я отправлю свой запрос на тот случай, если у кого-то еще возникнет такая же проблема.

SELECT TOP 5 *
FROM `Table_1` INNER JOIN `Table_2`
ON `Table_1`.`Some_ID` = `Table_2`.`Some_ID`
AND `Table_1`.`Timestamp` = `Table_2`.`Timestamp`
WHERE `Table_1`.`Timestamp`
IN (
SELECT TOP 5 `Table_1`.`Timestamp`
FROM (
SELECT TOP 10 *
FROM `Table_1` INNER JOIN `Table_2`
ON `Table_1`.`Some_ID` = `Table_2`.`Some_ID`
AND `Table_1`.`Timestamp` = `Table_2`.`Timestamp`
WHERE `Table_1`.`Some_ID` LIKE 'ID %'
AND `Table_2`.`Timestamp` LIKE '2018/03/20 %'
ORDER BY `Table_1`.`Timestamp` ASC)
ORDER BY `Table_1`.`Timestamp` DESC)
ORDER BY `Table_1`.`Timestamp` ASC;

Просто поиграйте с «ASC» и «DESC», чтобы получить результаты, которые вы готовы вернуть.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]