2013-08-12 90 views
0

我是一個begginer程序員,我想問一些關於SQL和PHP的東西。所以,我在數據庫中有3個表,第一個是表t2‘SQL php連接三張表

(id--> primary key, skills,level) 

和「關於用戶

(id--> primary key,username, password , email), 

第二個是關於技能t1'that存儲信息’第三個是用戶

(id--> primary key, years, language). 

我需要的表T2和T3存儲在已經存在於T1特定用戶更多speciffic細節。我怎樣才能做到這一點?

我試圖通過addind將每個id連接到另一個表,例如t2表包含t1的id作爲列,而t3表包含t1的id和id的t2。

我的問題是,當我在t3中插入數據時,可以使用t1.id和t2.id來顯示錶中所有三個表的信息。

CREATE TABLE IF NOT EXISTS `t3` (
    `degree` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, 
    `exp_years` varchar(25) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, 

    `department` varchar(25) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, 
    `t3_id` int(25) NOT NULL AUTO_INCREMENT, 
    `t1_id` int(11) NOT NULL, 
    `t2_id` int(11) NOT NULL, 
    PRIMARY KEY (`t3_id`), 
    UNIQUE KEY `id` (`t3_id`), 
    KEY `t1id` (`t1_id`), 
    KEY `t2_d` (`t2_id`), 
    KEY `t2_id` (`t2_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=50 ; 

CREATE TABLE IF NOT EXISTS `t2` (
    `fullname` varchar(35) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, 
    `webpage` varchar(150) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, 

    `rating` varchar(30) NOT NULL, 
    `t2_id` int(11) NOT NULL AUTO_INCREMENT, 
    `t1_id` int(11) NOT NULL, 
    PRIMARY KEY (`t2_id`), 
    KEY `t1_id` (`t1_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=147 ; 

CREATE TABLE IF NOT EXISTS `t1` (
    `t1_id` int(11) NOT NULL AUTO_INCREMENT, 
    `username` varchar(25) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, 
    `password` varchar(25) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, 
    `cpassword` varchar(25) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, 
    `email` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, 
    `role` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, 
    PRIMARY KEY (`t1_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=64 ; 
+0

你不清楚你要問什麼,特別是這一點:'我想要的是表t2和T3存儲在已經存在於t1中的特定用戶。我怎麼能做到這一點?'。請發佈一些SQL表格結構示例和你試過的東西 – Bojangles

+1

建議的一些內容:重命名錶格。這是不可理解的。只是稱他們爲'用戶,技能,語言'或其他東西。如果您稍後返回這些表名,則不知道它們的含義。 Tablesnames應該以另一個人可以說明的方式來解釋自己是什麼 – Martijn

+0

@Bojangles ..我在問題中發佈表格。 – user2673219

回答

0

在你的表T2和T3添加列userId並指定存儲在T1,當你在T2或T3添加一些用戶的ID。

之後,您可以通過使用SQL獲取有關用戶的所有信息加入:http://www.w3schools.com/sql/sql_join.asp

0

你需要一個更表將用戶鏈接到的技能,年語言:

T4 - > t4primarykey ,t1foreignkey,t2foreignkey,t3foreignkey

或可能更好:

T4 - > t4primarykey,t1foreignkey,t2foreignkey T5 - > t5primarykey,t1foreignkey,t3foreignkey

從一開始就設計您的表格以便它們可以以這種方式鏈接是很重要的。 Antoine的答案也將起作用,但會導致更大數據結構中的數據重複。 在理想的世界中,您的表格都不會包含其他表格中的數據。在數據庫設計中查找'正常表單',你的sql生命將最終變得更容易。

0

您的表格之間沒有任何關係,所以目前您無法根據特定用戶從t2或t3中選擇任何內容。 您可以將「用戶名」添加到表格t2和t3中,然後每個表格數據都基於每個用戶名。 因此,例如,你可以再從T2表,並根據他們的用戶名,從T3表「語言」中選擇自己的「技能等級」(如用戶名會在每個表)

這是一個基本的建議,但是,你應該閱讀建立表關係和外鍵。