如何将多个类似值保存到一个SQL记录

时间:2012-03-14 00:59:07

标签: php sql database

这是我的问题...... 我正在创建一个客户端管理界面,将值保存到SQL 我正在使用SQL / PHP / HTML / JQUERY / CSS等...

当我为每个客户输入一次所有信息时,一切都很好。 即。每个客户有1个或2个电话号码,一个地址等。

当我想存储多个客户的收据号码时,会出现问题。 或者即。同一客户的多个订单。

我可以从一开始,但随着时间的推移,我可能需要存储100个。

这样做的最佳做法是什么?

我想过将逗号分隔的ID存储在SQL中的单个文本记录中 然后检索值,将它们分开并提供它们。

做这种事的最佳方法是什么? 另外,如何命令SQL将值添加到现有字符串的末尾而不是更新它? 每次需要类似的记录时,我可以自动向sql添加一列吗?

3 个答案:

答案 0 :(得分:5)

您可以将其保存为逗号分隔值,但这是非常糟糕的做法,最终会变得很难维护。

这里需要的是SQL规范化。

例如,在收据的情况下,您有两个表,一个用于客户,一个具有唯一的ID字段,另一个用于收据,其中包含两列,即客户ID和收据编号,因此您的客户详细信息的表格如下:

Customers:
CustomerId INT
Address TEXT
Email TEXT

另一张收据表:

Receipts:
CustomerID INT
ReceiptNum VARCHAR(9)

然后获取该客户的所有收据

SELECT *
FROM Receipts
WHERE CustomerID = @ID

并添加新收据:

INSERT INTO Receipts (CustomerId, ReceiptNum)
VALUES (@ID, @Receipt)

这是一个非常宽松的描述,但我希望它能让你了解你需要做什么。

更新

如果您在客户表中有2个客户,那么为您提供一个样本的样本:

CustomerId   Address  Email
1            Here     test@test.com
2            There    test2@test.com

客户1有2个收据,而客户2有3个收据:

CustomerId   ReceiptNum
1            abcdde10
1            qwerty10
2            1234-1234
2            0987-0987
2            abcd-efgh

所以我的想法是,对于每一个额外的信息,你只需要添加另一行。这样,您可以为一个客户提供1位信息,为另一个客户提供20位信息,但为了以防万一,您无需定义20个备用字段。

答案 1 :(得分:1)

答案 2 :(得分:0)

最佳做法是拥有一个拥有客户端ID的客户表。然后有收据或订单的表格或客户可能有多个其他的。在收据表中,您还指定了客户端ID,它充当客户端表的一种“链接”或外键。然后,您可以相应地构建查询以检索客户端收据列表