ВЫБЕРИТЕ следующий и предыдущий идентификатор относительно искомого идентификатора из таблицы с пропущенными идентификатPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 ВЫБЕРИТЕ следующий и предыдущий идентификатор относительно искомого идентификатора из таблицы с пропущенными идентификат

Сообщение Anonymous »

У меня есть следующая БД.

Код: Выделить всё

+----+------+
| id | name |
+----+------+
|  1 | aaaa |
|  2 | bbbb |
|  4 | dddd |
|  7 | gggg |
+----+------+
Как видите, в идентификаторе отсутствует зуб.
поэтому вы не можете получить действительный предыдущий или следующий идентификатор, просто добавляя или вычитая 1 к текущему идентификатору.
В SQL, чтобы получить действительный идентификатор вперед и назад, я бы написал следующее.

Код: Выделить всё

SELECT
(SELECT id FROM topics WHERE id < tmp.id ORDER BY id DESC LIMIT 1) AS prev_id,
(SELECT id FROM topics WHERE id > tmp.id ORDER BY id ASC LIMIT 1) AS next_id
FROM
topics AS tmp
WHERE
id = 1
;

Код: Выделить всё

+---------+---------+
| prev_id | next_id |
+---------+---------+
| NULL    |       2 |
+---------+---------+

id = 2

+---------+---------+
| prev_id | next_id |
+---------+---------+
|       1 |       4 |
+---------+---------+

id = 4

+---------+---------+
| prev_id | next_id |
+---------+---------+
|       2 |       7 |
+---------+---------+

id = 7

+---------+---------+
| prev_id | next_id |
+---------+---------+
|       4 | NULL    |
+---------+---------+

id = 999

empty set

Я хочу получить такой способ извлечения записей с помощью стилей CodeIgniter3.
Я подтвердил, что мой приведенный выше необработанный SQL работает должным образом, но как я могу написать его как построитель запросов CodeIgniter?
В частности, это должно быть что-то вроде этого:

Код: Выделить всё

public function getBothIds($id)
{
$tableName = "topics";
$columnName = "id";
$asColumnNamePrev = "prev_" . $columnName;
$asColumnNameNext = "next_" . $columnName;

$query = $this->db
->select_min($columnName, $asColumnNamePrev) // how to write where inside of select_min?
->select_max($columnName, $asColumnNameNext) // how to write where inside of select_max?
->where($columnName, $id)
->get($tableName)
->row();
return $query;
}
Поскольку запись операторов SQL непосредственно в бизнес-логику является причиной внедрения SQL, мы хотим писать их с использованием функции-обертки.


Подробнее здесь: https://stackoverflow.com/questions/629 ... h-gapped-i
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»