PHPize Online / SQLize Online  /  SQLtest Online

A A A
Share      Blog   Popular
Copy Format Clear
CREATE TABLE test_table ( id serial primary key, prev_id integer null, next_id integer null ); INSERT INTO test_table (prev_id, next_id) VALUES (null, 2), (1, 3), (3, null); -- Начальные данные -- Создаём новый первый абзац -- Находим id 1ого абзаца (= 1) INSERT INTO test_table (prev_id, next_id) VALUES (null, 1); -- Добавили 4ый UPDATE test_table SET prev_id = 4 WHERE id = 1; -- Создаём абзац после 2ого -- После него идёт 3ий INSERT INTO test_table (prev_id, next_id) VALUES (2, 3); -- Добавили 5ый UPDATE test_table SET next_id = 5 WHERE id = 2; UPDATE test_table SET prev_id = 5 WHERE id = 3; -- Создаём последний абзац -- Перед ним окажется 3ий INSERT INTO test_table (prev_id, next_id) VALUES (3, null); -- Добавили 6ой UPDATE test_table SET next_id = 6 WHERE id = 3; SELECT * FROM test_table;
Copy Clear
Copy Format Clear
<?php $query = "SELECT * FROM test_table ORDER BY prev_id NULLS FIRST;"; $stmt = $pdo->prepare($query); $stmt->execute(); $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); $ar = []; var_dump(array_search(null, array_column($rows, "prev_id"))); while (count($ar) < count($rows)) { if (count($ar) === 0) { $ar[] = $rows[array_search(null, array_column($rows, "prev_id"))]; } else { $prevId = end($ar)["id"]; $ar[] = $rows[array_search($prevId, array_column($rows, "prev_id"))]; } } var_dump($ar);
Show:  
Copy Clear