Как сохранить порядок списков в Postgres? - PullRequest
1 голос
/ 11 апреля 2020

Я делаю свое первое postgres приложение с реакцией. Это простой список задач.

Прямо сейчас, когда вы получаете список задач, вы получаете следующее:

pernstack=# SELECT * FROM todo;
 todo_id |          description
---------+-------------------------------
     825 | First task
     826 | Second Task
     824 | Third task
     822 | Fourth task
(4 rows)

Проблема в том, что если я редактирую первую задачу с запросом PUT , Эта задача помещается в конец списка. Вот запрос на редактирование:

app.put("/todos/:id", async (req, res) => {
  try {
    const { id } = req.params;
    const { description } = req.body;
    const updateTodo = await pool.query(
      "UPDATE todo SET description = $1 WHERE todo_id = $2",
      [description, id]
    );

    res.json("Todo was updated");
  } catch (err) {
    console.error(err.message);
  }
});

Какой самый простой c способ отредактировать задачу, не перемещая ее по порядку? Я не хотел добавлять вручную столбец index. В MySQL я считаю, что это делается автоматически.

Ответы [ 2 ]

3 голосов
/ 11 апреля 2020

SELECT * FROM todo ORDER BY todo_id сделает их всегда в том порядке, в котором они были добавлены, при условии, что todo_id - это автоинкрементное число

Если вы хотите указать порядок списка в будущем , вы хотели бы добавить столбец с меткой list_order или что-то в этом роде, а затем сделать SELECT * FROM todo ORDER BY list_order

2 голосов
/ 11 апреля 2020

Таблицы базы данных являются неупорядоченными наборами. Если вы явно не используете предложение order by при запросе таблицы (например, с ручным столбцом task_index, как вы предложили), вы не можете предполагать что-либо о порядке, возвращаемом из запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...