gpt4 book ai didi

mysql - 如何在数据库中存储不同长度的列表/订单?

转载 作者:可可西里 更新时间:2023-11-01 08:39:47 29 4
gpt4 key购买 nike

我一直在做一个项目,我需要在数据库中存储订单列表(在本例中为食品)。

我曾尝试四处寻找存储此类列表的最佳方式,但找不到任何方法。

目前,我将数据存储在 phpMyAdmin/SQL 中,订单存储为要打印的原始 HTML。它有效,但必须有一种更有效的方式来存储这些订单。

订单看起来类似于:

  1. 汉堡餐
    • 筹码
  2. 帕尔马鸡
    • 柠檬水

因此,我认为最好制作一个单独的表来保存订单,这样它的结构会更好一些,但我想不出一种可行的方法来处理不同长度的订单。不然的话,存成JSON或者数组再用JS构造是不是更好?

JSON 示例:

{
"order_id": 666,
"orders": [{
"item": "Burger Meal",
"notes": ["Chips", "Water"]
},
{
"item": "Chicken Parma",
"notes": ["Lemonade"] //<-- Simpler to detect number of notes?
}]
}

TL;DR:在数据库中存储变长列表的最佳方式?

最佳答案

您创建一个 order_items 表,每个订单中的每个项目都有一行,并创建一个 item_notes 表,每个注释有一行。

CREATE TABLE order_items (
item_id INT AUTO_INCREMENT NOT NULL,
name VARCHAR(32) NOT NULL,
order_id INT NOT NULL,
quantity INT NOT NULL,
PRIMARY KEY (item_id),
UNIQUE KEY (order_id, name),
CONSTRAINT FOREIGN KEY (order_id) REFERENCES orders(order_id)
);
CREATE TABLE item_notes (
note_id INT AUTO_INCREMENT NOT NULL,
text VARCHAR(100) NOT NULL,
item_id INT NOT NULL,
PRIMARY KEY (note_id),
UNIQUE KEY (item_id, text),
CONSTRAINT FOREIGN KEY (item_id) REFERENCES order_items(item_id)
);

然后您可以通过连接获取有关订单的所有信息:

SELECT o.*, i.*, n.*
FROM orders AS o
LEFT JOIN order_items AS i ON o.order_id = i.order_id
LEFT JOIN item_notes AS n ON i.item_id = n.item_id
WHERE o.order_id = 666

关于mysql - 如何在数据库中存储不同长度的列表/订单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37473053/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com