Ближайший ID - PHP / MYSQL выпуск - PullRequest
1 голос
/ 23 марта 2020

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

У меня есть таблица пригородов в городе, и я хочу отобразить 2 вверх и 2 вниз, но в том же городе моя таблица такова:

id | suburb_name   | region
1  | Caloundra     | Sunshine Coast
2  | Currimundi    | Sunshine Coast
3  | Bribie Island | Morton Bay
4  | Caboolture    | Morton Bay
5  | Golden Beach  | Sunshine Coast

Поскольку я не мог потрудиться привести больше примеров, просто go 1 вверх 1 вниз. В настоящее время мы находимся на id 2. Если я смотрю 1, я вижу Мортон Бэй, что неправильно. Мне нужно увидеть идентификатор 5. Какой следующий идентификатор с тем же регионом?

Это совершенно неправильно, но это то, как далеко я нахожусь:

SELECT
    slug
    , suburb_name
    , (SELECT location_id FROM rh_suburbs WHERE region = '$sub_region') as suburbs
FROM rh_suburbs
WHERE location_id in ($plus_one, $plus_two, $minus_one, $minus_two)
  AND status = '1'
  AND location_id != '$current'
LIMIT 4

1 Ответ

1 голос
/ 23 марта 2020

С вашей версией MySQL этого, вероятно, легче всего достичь, используя UNION строк до и после выбранного местоположения. Как прямой SQL запрос:

(SELECT *
 FROM rh_suburbs
 WHERE region = 'Sunshine Coast'
   AND id < 6
 ORDER BY id DESC
 LIMIT 2)
UNION ALL
(SELECT *
 FROM rh_suburbs
 WHERE region = 'Sunshine Coast'
   AND id > 6
 ORDER BY id ASC
 LIMIT 2)
 ORDER BY id

В этом запросе вы заменили бы 'Sunshine Coast' на '$sub_region' и 6 на $current.

Вывод (для моего слегка расширенная демонстрация по SQLFiddle ):

id  suburb_name     region
2   Currimundi      Sunshine Coast
5   Golden Beach    Sunshine Coast
7   Currimundi 2    Sunshine Coast
10  Golden Beach 2  Sunshine Coast
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...