php - SQL数据存储

标签 php mysql

我有 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/

相关文章:

php - 在 MySQL 中根据时间选择谁轮类的问题

java - 我的 Swing 应用程序中的数据库连接错误为强制转换为语句

C#清空MYSQL表内容

javascript - 如何在node.js和expressJs中实现登录系统

php - 如何使用 PHP Laravel 从 Outlook API 下载附件?

php - 获取 XML 元素文本,跳过某些元素,将其转换为单个字符串

mysql - SQL 选择其他表中每个 id 的不同行

mysql - SQL在一个查询中使用where获取一列的总和以及不同列的总和?

php - 如何连接多个 MySQL 查询

php - 如何在单个div中显示两行div