Ввод и вывод данных из двух таблиц
Есть одна таблица там информация об Организации(назв. орг,телефон,адрес и.т.д) Также там должны быть телефоны клиентов этой организации. Я создал таблицу спец для клиентов различн орг.
Как сделать так чтобы когда ты занес информацию в БД, при выводи он понимал что в таблице где клиента вот эти клиенты относятся к этой орг., а эти к той.Т.е как запрос делать...
У меян вот такая проблема.
Есть одна таблица там информация об Организации(назв. орг,телефон,адрес и.т.д) Также там должны быть телефоны клиентов этой организации. Я создал таблицу спец для клиентов различн орг.
Как сделать так чтобы когда ты занес информацию в БД, при выводи он понимал что в таблице где клиента вот эти клиенты относятся к этой орг., а эти к той.Т.е как запрос делать...
Все таблицы в БД связаны между собой при помощи полей_ключей. Например у тебя таблица содержит информацию об организациях и другая таблица о клиентах организации. Кто кому принадлежит(грубо говоря) ? Клиент принад-ит организации, значит таблица Организации главная(у каждой организации должен быть ID_Organization - primary key - уникальный идентификатор) а таблица Клиенты подчиненная ей, и связь между ними по ID_Organization полю организации.
NameOrg ID_Org
org1 1
org2 2
tblCustomers
NameCust ID_Cust Org
cust1 467 2
cust2 897 1
cust3 111 2
select * from tblOrganizations t1,tblCustomers t2
where t1.ID_Org = t2.Org
P.S. Конечно при желании можно ввести в tblCustomers поле имя организации, и по имени сделать связь, но так обычно не делают так. Думаю одна из причин потому что имя не считается уникальным значением.
Или лучше сделать так: сначало создать орг. а потом просто добавлять клиентов. Так?
А как данные добавить в БД. Т.е ID_org и org были одинаковые.
Или лучше сделать так: сначало создать орг. а потом просто добавлять клиентов. Так?
Именно так: сначала заполняется данными таблица Организации, потом Клиенты.
Вообщето стоит взять справочник SQL и посмотреть как правильно строить связи между таблицами :
1 - строятся/заполняются данными главные таблицы(в них объявляются Primary key )
2 - строятся/заполняются данными зависимые таблицы (делается связь по связующему полю которое в зависимыx аблицах объявляется Foreign key)
В результате получаем реальную связь между таблицами. Например ты не сможешь удалить данные об организации если в зависимой таблицы(клиенты) есть клиенты данной орг-ии => удалять надо сначала клиентов. etc.
CREATE TABLE `client` (
`id` int(9) NOT NULL default '0',
`org` int(9) NOT NULL default '0',
`fio` text NOT NULL,
`www` text NOT NULL,
KEY `org` (`org`)
) TYPE=MyISAM;
# Структура таблицы `proect`
#
CREATE TABLE `proect` (
`id` int(9) NOT NULL auto_increment,
`name_org` text NOT NULL,
`who` text NOT NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;
Сделал пока вот такие таблицы. А как делать зависемые таблицы,я че-то не понял.
CREATE TABLE `client` (
`id` int(9) NOT NULL default '0',
`org` int(9) NOT NULL default '0',
`fio` text NOT NULL,
`www` text NOT NULL,
KEY `org` (`org`)
) TYPE=MyISAM;
# Структура таблицы `proect`
#
CREATE TABLE `proect` (
`id` int(9) NOT NULL auto_increment,
`name_org` text NOT NULL,
`who` text NOT NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=2 ;
Попробуй так:
[COLOR=blue]Foreign Key [/COLOR] ('org') [COLOR=blue]References[/COLOR] 'proect'('id');
не уверенна что подойдет, т.к. синтаксис разный: у меня SQL Oracle
Лан, я вечерком поищу.;)
Ну че совети еще кто-то может дать?
Тебе OlgaKr правильно написала. Может с точки зрения синтаксиса нет (но ведь ты не указал БД), но сточки зрения логики БД все верно. И очень правильный совет почитать книжку про организацию данных. Еще советую обратить внимание на имена переменных. Например если таблица называется Customer, то Primary Key лучше называть CustomerID, ну и соответсвенно Foreighn Key так же. В твоем случае, например:
-- Таблица организаций
Таблица Organisation:
OrgID int (PK),
OrgName varchar(250),
OrgNote varchar(1024)
-- если у организации несколько офисов, то каждый офис ссылается на конкретную организацию, и конкретный адрес
Таблица Office:
OffID int (PK),
OrgID int (FK),
AddrID int (FK),
Note varchar(50)
-- таблица адресов, где могут храниться адреса любых сущностей, в нашем случае офисов
Таблица Address:
AddrID (PK),
Street varchar(50),
House varchar(10),
Build varchar(10),
Korp varchar(10),
Note varchar(100)
-- таблица контактных лиц, которые работают в офисах организаций
Таблица Contact:
ContID int (PK)
FirstName varchar(50),
LastName varchar(50),
MidName varchar(50)
-- таблица увязывающая офис и контактное лицо (т.к. бывают такие ситуации когда один человек работает в разных офисах и наоборот один офис представляют несколько людей, то создаем отдельную таблицу которая увязывает конкретный оффис и конкретоного человека (а офис как мы помним привязан к организации) таким образом создаем довольно гибкую систему учета организаций.
Таблица ContactOffice:
COffID int (PK),
OffID int (FK),
ContID (FK)
В кратце все...
`id` int(11) NOT NULL auto_increment,
`name_org` text NOT NULL,
`cat` text NOT NULL,
`who` text NOT NULL,
`fio` text NOT NULL,
`dolznost` text NOT NULL,
`tel` text NOT NULL,
`facs` text NOT NULL,
`mail` text NOT NULL,
`www` text NOT NULL,
`adres` text NOT NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=12 ;
CREATE TABLE `hod` (
`id` int(11) NOT NULL auto_increment,
`id_org` text NOT NULL,
`chislo` text NOT NULL,
`zvonok` text NOT NULL,
`contact` text NOT NULL,
`rez` text NOT NULL,
`dop` text NOT NULL,
`sost` text NOT NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=11 ;
CREATE TABLE `client` (
`id` int(11) NOT NULL auto_increment,
`id_org` text NOT NULL,
`fio` text NOT NULL,
`dolznost` text NOT NULL,
`tel` text NOT NULL,
`facs` text NOT NULL,
`mail` text NOT NULL,
`www` text NOT NULL,
`adres` text NOT NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=25 ;
Ну вот правильно же сделал?
И еще вопрос как два запроса подряд сделать типа только таблицы будут меняться!
$result = mysql_query($sql);
if($row = mysql_fetch_array($result)) {?> форма ....}
Пытался два раза сделать но не правильно выдаешь ошибку.Как сделать?