2013-08-12 2 views
0

Я начинаю программист, и я хочу спросить что-то о SQL и PHP. Итак, у меня есть 3 таблицы в базе данных, то первый из них является таблица «t1'that хранит информацию о пользователеSQL php connect три таблицы

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

второй составляет около навыков„t2“

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

а третий один около более speciffic детали для пользователя

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

То, что я хочу это таблица t2 и t3 хранится в определенном пользователем, который уже существует в t1. Как я могу это достичь?

Я попытался подключить три таблицы, как это, добавив каждый один идентификатор к другой таблице, например, таблица t2 содержит идентификатор t1 в качестве столбца, а таблица t3 содержит идентификатор t1 и идентификатор из 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

Некоторые рекомендации: Переименуйте свои таблицы. Это непонятно. Просто назовите их чем-то вроде «пользователей, навыков, языка» или чего-то еще.Если вы вернетесь к этим именам таблиц позже, вы не знаете, что они означают. Табличные имена должны объяснять себя таким образом, чтобы другой человек мог сказать, что это такое для – Martijn

+0

@Bojangles .. Я размещаю таблицы в вопросе. – user2673219

ответ

0

Добавить столбец userId в таблицах t2 и t3 и указать идентификатор пользователя, хранящегося в t1, когда вы что-то добавить в t2 или t3.

После этого, вы можете получить всю информацию о пользователе, с помощью SQL присоединяется: http://www.w3schools.com/sql/sql_join.asp

0

Вам нужно еще одну таблицу, чтобы связать пользователей с навыками, лет и язык:

t4 -> t4primarykey , t1foreignkey, t2foreignkey, t3foreignkey

или, возможно, лучше:

t4 -> t4primarykey, t1foreignkey, t2foreignkey t5 -> t5primarykey, t1foreignkey, t3foreignkey

С самого начала важно разработать таблицы, чтобы они могли быть связаны таким образом. Ответ Антуана также будет работать, но приведет к дублированию данных в больших структурах данных. В идеальном мире ни одна из ваших таблиц не будет содержать данные, хранящиеся в других таблицах. Посмотрите «нормальные формы» в дизайне базы данных, и ваша жизнь в sql со временем станет намного проще.

0

У вас нет связей между вашими таблицами, поэтому в настоящее время у вас нет возможности выбрать что-либо из t2 или t3 на основе определенного пользователя. Вы можете просто добавить «имя пользователя» в свои таблицы t2 и t3, а затем каждая таблица данных основана на каждом имени пользователя. Так, например, вы можете выбрать свой «уровень навыков» из таблицы t2 и «язык» из таблицы t3 на основе их имени пользователя (поскольку имя пользователя будет в каждой таблице)

Это основное предложение, однако, вы должны прочитать по отношению к табличным отношениям и внешним ключам.

Смежные вопросы