Как связать 3 таблицы
Автор kok, 03 сент. 2010 15:19
Сообщений в теме: 9
#1
Отправлено 03 Сентябрь 2010 - 15:19
Всем привет!
Задача такая: есть 3 таблицы, 1 связана со 2, 2 связана с 3-й.
В 1-й таблице нужно сделать печатную форму RTF с данными из 1, 2-й и 3-й таблиц.
Как получить доступ к данным из з-й таблицы?
ps: если надо, опишу более подробно, пока главное понять суть.
Задача такая: есть 3 таблицы, 1 связана со 2, 2 связана с 3-й.
В 1-й таблице нужно сделать печатную форму RTF с данными из 1, 2-й и 3-й таблиц.
Как получить доступ к данным из з-й таблицы?
ps: если надо, опишу более подробно, пока главное понять суть.
*Свободный программер.
#2
Отправлено 03 Сентябрь 2010 - 15:44
Создать скрытые вычисляемые поля, в которых будет храниться информация из другой таблицы.
#3
Отправлено 03 Сентябрь 2010 - 16:01
Техподдержка (3.9.2010, 15:44) писал:
Создать скрытые вычисляемые поля, в которых будет храниться информация из другой таблицы.
Это первая моя мысль была, спасибо за скорый ответ.
Только вот в чём дело, получается некое дублирование данных, я думал есть более элегантный способ.
Полей ведь может быть много...
И еще, у меня получилось вот что сделать в RTF отчёте: поле 1 табл. ссылается на поле 2-й табл., которое в свою очередь ссылается на поле 3-й табл. Так можно делать или вылезет потом бага?
*Свободный программер.
#4
Отправлено 03 Сентябрь 2010 - 16:51
На самом деле достаточно одного вычисляемого поля, и то только для прямой связи с 3-й таблицей.
Поясню. Когда вы создаете поле связи, из любого шаблона (и html, и rtf) вы получаете доступ сразу ко всем полям связанной таблицы, а не только к тому что отображается в таблице. Сделано это как раз для того чтобы не создавать массу вычисляемых полей и не дублировать зря данные, как вы справедливо отметили. Чтобы получить доступ к полям связанной таблицы, в шаблоне rtf необходимо их вставлять в формате "Название поля связи.Название нужного вам поля из связанной таблицы". И все. С 3-й таблицей немного сложнее, потому что с ней нет прямой связи. Поэтому ее нужно создать, как раз через вычисляемое поле.
Поясню. Когда вы создаете поле связи, из любого шаблона (и html, и rtf) вы получаете доступ сразу ко всем полям связанной таблицы, а не только к тому что отображается в таблице. Сделано это как раз для того чтобы не создавать массу вычисляемых полей и не дублировать зря данные, как вы справедливо отметили. Чтобы получить доступ к полям связанной таблицы, в шаблоне rtf необходимо их вставлять в формате "Название поля связи.Название нужного вам поля из связанной таблицы". И все. С 3-й таблицей немного сложнее, потому что с ней нет прямой связи. Поэтому ее нужно создать, как раз через вычисляемое поле.
#5
Отправлено 03 Сентябрь 2010 - 16:55
И еще, у меня получилось вот что сделать в RTF отчёте: поле 1 табл. ссылается на поле 2-й табл., которое в свою очередь ссылается на поле 3-й табл. Так можно делать или вылезет потом бага?
#6
Отправлено 03 Сентябрь 2010 - 17:42
Не знал, что поле типа связь может быть вычисляемым.
Итак, я создаю в 1-й таблице 'поле1' типа связь с 3-й таблицей (с её любым полем или нет?), прячу 'поле1' через Доступ.
И дальше незнаю.
Подскажите, как сделать вычисляемое поле для прямой связи с 3-й таблицей?
Итак, я создаю в 1-й таблице 'поле1' типа связь с 3-й таблицей (с её любым полем или нет?), прячу 'поле1' через Доступ.
И дальше незнаю.
Подскажите, как сделать вычисляемое поле для прямой связи с 3-й таблицей?
*Свободный программер.
#7
Отправлено 03 Сентябрь 2010 - 17:47
Вычисляемым может быть любое поле. Для поля связи нужно вычислить id связанной строки, т.к. именно они там и хранятся.
Да. И затем в вычислении через поле связи со 2-й таблицей находите id нужной строки из 3-й.
Итак, я создаю в 1-й таблице 'поле1' типа связь с 3-й таблицей (с её любым полем или нет?), прячу 'поле1' через Доступ.
#8
Отправлено 06 Сентябрь 2010 - 08:15
Разработчик (3.9.2010, 17:47) писал:
Вычисляемым может быть любое поле. Для поля связи нужно вычислить id связанной строки, т.к. именно они там и хранятся.
Да. И затем в вычислении через поле связи со 2-й таблицей находите id нужной строки из 3-й.
Да. И затем в вычислении через поле связи со 2-й таблицей находите id нужной строки из 3-й.
Запутался чего-то я.
Итак, есть 3 таблицы: Договор, Организация, Реквизиты.
"Договор.Организация" связан с "Организация.Название организации" (т.е. 1->2), а "Реквизиты.Организация" связана с "Организация.Полное название организации" (т.е. 3->2) .
В таблице Договор д.б. печатная форма с данными из всех этих трёх таблиц.
Я думал вот как надо делать: создаю служебное поле "Договор.Полное название организации", делаю связь с "Реквизиты.Организация" (т.е. 1->3) и автоматически заполняю поле "Договор.Полное название организации" значением из "Организация.Полное название организации". А оказалось не так!?
Ведь при создании Договора я бы хотел выбрать только организацию ("Организация.Название организации"), а полное её название само бы подставилось в поле "Договор.Полное название организации". А теперь я окончательно запутался
*Свободный программер.
#9
Отправлено 06 Сентябрь 2010 - 08:39
Я думал вот как надо делать: создаю служебное поле "Договор.Полное название организации", делаю связь с "Реквизиты.Организация" (т.е. 1->3) и автоматически заполняю поле "Договор.Полное название организации" значением из "Организация.Полное название организации". А оказалось не так!?
Вот образец кода для вашего случая:
$dog = data_table("Договор", "id={ID}"); // массив текущей строки таблицы Договоры
$rekv = data_table("Реквизиты", "`Организация`=".$dog['Организация']); // реквизиты выбранной организации
return $rekv['ID']; // возвращаем id строки с реквизитами
#10
Отправлено 06 Сентябрь 2010 - 09:01
Разработчик (6.9.2010, 8:39) писал:
Почему не так? Как раз об этом и идет речь. Иначе какой смысл говорить о вычислениях, если поле будет выбирается вручную.
Вот образец кода для вашего случая:
Вот образец кода для вашего случая:
$dog = data_table("Договор", "id={ID}"); // массив текущей строки таблицы Договоры
$rekv = data_table("Реквизиты", "`Организация`=".$dog['Организация']); // реквизиты выбранной организации
return $rekv['ID']; // возвращаем id строки с реквизитамиСпасибо! Работает!!!
*Свободный программер.
Количество пользователей, читающих эту тему: 2
0 пользователей, 2 гостей, 0 анонимных













