在mysql中的一个字段中存储多个动态值

时间:2009-10-20 06:43:16

标签: php mysql

如何在mysql数据库的一个字段中存储多个值(数字和单词),然后在我需要使用mySQL和php时再次提取它们?

例如: 我想在一个数据库的同一个字段中使用表单(例如1,2,foo,tree和monkey)存储用户将输入的动态值。

然后我想提取它并将它们放在单独的行上,例如: 1 2 FOO 树 猴

任何想法?

3 个答案:

答案 0 :(得分:5)

MySQL 5.7.8具有一个新的数据类型,即JSON。您可以在该列中存储包含所有用户信息的JSON字符串。

示例:

CREATE TABLE table1 (jsonString JSON);

INSERT INTO table1 VALUES('{"car": "bmw", "year": "2006", "key": "value"  }');

MySQL Reference

答案 1 :(得分:1)

如果您指的是可以处理大量内容的数据类型,您可以使用text,否则这是一个坏主意,这是您应该如何存储规范化关系数据库中的数据。您能否提供有关您存储的信息?

我自己就是一个SQL菜鸟,所以如果有任何大师有更好的架构策略,请告诉我......这就是我提出的:

转储:

/*

Navicat MySQL Data Transfer


Date: 2009-10-20 03:01:18

*/



SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------

-- Table structure for `job_scores`

-- ----------------------------

DROP TABLE IF EXISTS `job_scores`;

CREATE TABLE `job_scores` (

  `job_id` int(2) NOT NULL,

  `user_id` int(2) NOT NULL,

  `rating` tinyint(2) NOT NULL

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;



-- ----------------------------

-- Records of job_scores

-- ----------------------------

INSERT INTO `job_scores` VALUES ('1', '1', '10');



-- ----------------------------

-- Table structure for `jobs`

-- ----------------------------

DROP TABLE IF EXISTS `jobs`;

CREATE TABLE `jobs` (

  `id` int(2) NOT NULL auto_increment,

  `name` varchar(50) collate utf8_unicode_ci default NULL,

  PRIMARY KEY  (`id`)

) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;



-- ----------------------------

-- Records of jobs

-- ----------------------------

INSERT INTO `jobs` VALUES ('1', 'plumber');



-- ----------------------------

-- Table structure for `users`

-- ----------------------------

DROP TABLE IF EXISTS `users`;

CREATE TABLE `users` (

  `id` int(2) NOT NULL auto_increment,

  `name` varchar(50) collate utf8_unicode_ci NOT NULL,

  PRIMARY KEY  (`id`)

) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;



-- ----------------------------

-- Records of users

-- ----------------------------

INSERT INTO `users` VALUES ('1', 'John');

示例查询:

SELECT

jobs.name as job_name, users.name as user_name, job_scores.rating

FROM

job_scores


INNER JOIN jobs ON jobs.id = job_scores.job_id
INNER JOIN users on users.id = job_scores.user_id

WHERE 

user_id = 1

结果:

  

管道工John 10

答案 2 :(得分:1)

您可以将所有值放入数组中,然后将其序列化:

$string = serialize(array(1, 2, 'foo', 'tree', 'monkey');

这将为您提供存储在数据库中的字符串。稍后,您可以通过反序列化来恢复阵列:

$array = unserialize($string);