2009-10-20 45 views
0

如何在mysql數據庫的一個字段內存儲多個值(數字和單詞),然後再次提取它們以及何時需要使用mySQL和php?在mysql中的一個字段內存儲多個動態值

例如: 我想存儲用戶輸入的動態值,例如1,2,foo,tree和monkey等所有表單都在數據庫的相同字段中。

然後我想提取它,並把它們放在單獨的線路,例如:富 樹 猴子

什麼想法?

回答

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 

結果:

水暖工約翰·1 0

+0

我試圖存儲一個用戶的工作技能以及評級。 – somenut

+0

你應該有1個用戶表,1個表作業,users表中的外鍵列對應於他們的工作ID,因爲這是一個相對簡單的表,如果有的話用戶表上只有*一個*。否則,最好製作一個單獨的表格來存儲用戶標識,作業和沒有主鍵的評級。 –

+0

如何爲數據庫中的每個用戶存儲多個技能值? – somenut

1

你可以把所有的值到一個數組,然後將其序列化:

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

這會給你,你在你的數據庫中存儲的字符串。後來,你可以通過反序列化來恢復你的陣列:

$array = unserialize($string); 
相關問題