如何在mysql数据库的一个字段中存储多个值(数字和单词),然后在我需要使用mySQL和php时再次提取它们?
例如: 我想在一个数据库的同一个字段中使用表单(例如1,2,foo,tree和monkey)存储用户将输入的动态值。
然后我想提取它并将它们放在单独的行上,例如: 1 2 FOO 树 猴
任何想法?
答案 0 :(得分:5)
MySQL 5.7.8具有一个新的数据类型,即JSON。您可以在该列中存储包含所有用户信息的JSON字符串。
示例:
CREATE TABLE table1 (jsonString JSON);
INSERT INTO table1 VALUES('{"car": "bmw", "year": "2006", "key": "value" }');
答案 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);