Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ввод и вывод данных из двух таблиц

15K
30 марта 2006 года
Mr.Voron
10 / / 30.03.2006
У меян вот такая проблема.
Есть одна таблица там информация об Организации(назв. орг,телефон,адрес и.т.д) Также там должны быть телефоны клиентов этой организации. Я создал таблицу спец для клиентов различн орг.
Как сделать так чтобы когда ты занес информацию в БД, при выводи он понимал что в таблице где клиента вот эти клиенты относятся к этой орг., а эти к той.Т.е как запрос делать...
242
30 марта 2006 года
Оlga
2.2K / / 04.02.2006
Цитата:
Originally posted by Mr.Voron
У меян вот такая проблема.
Есть одна таблица там информация об Организации(назв. орг,телефон,адрес и.т.д) Также там должны быть телефоны клиентов этой организации. Я создал таблицу спец для клиентов различн орг.
Как сделать так чтобы когда ты занес информацию в БД, при выводи он понимал что в таблице где клиента вот эти клиенты относятся к этой орг., а эти к той.Т.е как запрос делать...



Все таблицы в БД связаны между собой при помощи полей_ключей. Например у тебя таблица содержит информацию об организациях и другая таблица о клиентах организации. Кто кому принадлежит(грубо говоря) ? Клиент принад-ит организации, значит таблица Организации главная(у каждой организации должен быть ID_Organization - primary key - уникальный идентификатор) а таблица Клиенты подчиненная ей, и связь между ними по ID_Organization полю организации.

Код:
tblOrganizations
 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 поле имя организации, и по имени сделать связь, но так обычно не делают так. Думаю одна из причин потому что имя не считается уникальным значением.
15K
31 марта 2006 года
Mr.Voron
10 / / 30.03.2006
А как данные добавить в БД. Т.е ID_org и org были одинаковые.
Или лучше сделать так: сначало создать орг. а потом просто добавлять клиентов. Так?
242
31 марта 2006 года
Оlga
2.2K / / 04.02.2006
Цитата:
Originally posted by Mr.Voron
А как данные добавить в БД. Т.е ID_org и org были одинаковые.
Или лучше сделать так: сначало создать орг. а потом просто добавлять клиентов. Так?



Именно так: сначала заполняется данными таблица Организации, потом Клиенты.
Вообщето стоит взять справочник SQL и посмотреть как правильно строить связи между таблицами :
1 - строятся/заполняются данными главные таблицы(в них объявляются Primary key )
2 - строятся/заполняются данными зависимые таблицы (делается связь по связующему полю которое в зависимыx аблицах объявляется Foreign key)
В результате получаем реальную связь между таблицами. Например ты не сможешь удалить данные об организации если в зависимой таблицы(клиенты) есть клиенты данной орг-ии => удалять надо сначала клиентов. etc.

15K
31 марта 2006 года
Mr.Voron
10 / / 30.03.2006
Сделал пока вот такие таблицы. А как делать зависемые таблицы,я че-то не понял.
Код:
Структура таблицы `client`

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 ;
242
31 марта 2006 года
Оlga
2.2K / / 04.02.2006
Цитата:
Originally posted by Mr.Voron
Сделал пока вот такие таблицы. А как делать зависемые таблицы,я че-то не понял.
Код:
Структура таблицы `client`

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

15K
31 марта 2006 года
Mr.Voron
10 / / 30.03.2006
мда... не пашет.
Лан, я вечерком поищу.;)
15K
01 апреля 2006 года
Mr.Voron
10 / / 30.03.2006
Ну че совети еще кто-то может дать?
385
05 апреля 2006 года
SomewherSomehow
477 / / 25.07.2004
Цитата:
Originally posted by Mr.Voron
Ну че совети еще кто-то может дать?


Тебе 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)

В кратце все...

15K
06 апреля 2006 года
Mr.Voron
10 / / 30.03.2006
Код:
CREATE TABLE `proect` (
  `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 ;


Ну вот правильно же сделал?
15K
06 апреля 2006 года
Mr.Voron
10 / / 30.03.2006
Ну че все так???
И еще вопрос как два запроса подряд сделать типа только таблицы будут меняться!
 
Код:
$sql = "select * from $usertable";
$result = mysql_query($sql);
if($row = mysql_fetch_array($result)) {?> форма ....}

Пытался два раза сделать но не правильно выдаешь ошибку.Как сделать?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог