我有 MySQL 数据库,它以下面的方式存储数据:
id | value | 1 @value1 @value2 @value3 _________@value4__ 2 @value5 @value6 _________@value7__ 3 @value8 @value9
如果我需要从特定的“id”中提取“值”,我将继续执行以下步骤:
- 选择我需要的“id”行
- 使用 PHP 函数
explode("@",$value)
对存储在特定“id”中的值进行剪切,并从中创建一个数组。
所以我的问题是,以这种方式工作和存储数据是否有效?也许我应该改变存储方式(如下所示)并仅使用 SQL 查询来检索数据。
你会推荐什么?
id | value | 1 @value1 1 @value2 1 @value3 _1_______@value4__ 2 @value5 2 @value6 _2_______@value7__ 3 @value8 3 @value9
最佳答案
将您的架构更改为:
id | group | value
======================
1 | 1 | "Value 1"
2 | 1 | "Value 2"
3 | 1 | "Value 3"
4 | 2 | "Value 4"
5 | 2 | "Value 5"
6 | 3 | "Value 6"
7 | 3 | "Value 7"
8 | 3 | "Value 8"
...
这样,每一行都有一个唯一的 ID,如果您发现自己需要指向特定行,并且将使用标识符(在本例中为数字)对值进行分组,那么这非常有用。
现在您可以轻松选择属于特定组的所有值:
SELECT `value` FROM `tableName` WHERE `group` = 2
这将为您提供表格的这个子集:
id | group | value
======================
4 | 2 | "Value 4"
5 | 2 | "Value 5"
创建表的SQL是:
DROP TABLE IF EXISTS `tableName`;
CREATE TABLE `tableName` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`group` INT NOT NULL,
`value` VARCHAR(256) NOT NULL
);
您还应该阅读 relational model 的内容是,以及它是如何工作的。知道如何normalize your database是一个相关主题,了解它很有用。
关于php - SQL数据存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27730194/