【问题标题】:How to maintain list order in Postgres?如何在 Postgres 中维护列表顺序?
【发布时间】:2020-04-12 03:20:52
【问题描述】:

我正在制作我的第一个带有 react 的 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);
  }
});

在不乱序的情况下编辑任务的最基本方法是什么?我不想手动添加index 列。在 MySQL 中,我相信这是自动完成的。

【问题讨论】:

    标签: node.js postgresql express


    【解决方案1】:

    SELECT * FROM todo ORDER BY todo_id 将使它们始终按照添加的顺序排列,假设 todo_id 是一个自动递增的数字

    如果您希望将来能够指定列表的顺序,您可能希望添加一个标有list_order 或类似名称的列,然后执行SELECT * FROM todo ORDER BY list_order

    【讨论】:

    • 谢谢,我想这是显而易见的答案,但我想确保在 Postgres 中没有自动完成此操作。
    【解决方案2】:

    数据库表是无序集。除非您在查询表时明确使用 order by 子句(例如,按照您的建议使用手动 task_index 列),否则您不能假设查询返回的顺序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-19
      • 1970-01-01
      • 1970-01-01
      • 2015-06-27
      • 2020-07-31
      相关资源
      最近更新 更多