Перейти к содержимому


как связать 2 таблицы


Сообщений в теме: 14

#1 serg777

    Активный участник

  • Пользователи
  • PipPipPip
  • 44 сообщений

Отправлено 15 Март 2013 - 13:59

Друзья, простите, пожалуйста, сам ну ни как не могу разобраться...

Есть 2 таблицы:
1. клиенты
2. заказы

в каждом заказе есть сумма

Как сделать так, чтобы у каждого клиента было поле в котором отображается сумма всех его заказов.

Сколько я не пытаюсь связывать 2 таблицы, у меня ничего не получается....

Кстати, разработчикам хотел сказать большое спасибо. Программа, похоже, очень хорошая, гибкая. Похоже можно реализовать все свои потребности. Но, конечно, разобраться трудновато... Я обычно с работаю с программой Filemacker, там и скрипты и все вычисления прописываются очень легко и интуитивно понятно.

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 15 Март 2013 - 14:31

Пример то хоть приведите, как пытаетесь. А то непонятно на что опираться.

#3 serg777

    Активный участник

  • Пользователи
  • PipPipPip
  • 44 сообщений

Отправлено 15 Март 2013 - 14:59

Есть 2 таблицы:
1. клиенты
2. заказы


1. Пытался заказ привязать к клиенту
В таблице "заказ" сделал поле "имя клиента" типа "связь", и с помощью вычисления пытался вставить в него значение из поля "кто создал"
Получилось, что если поле "имя клиента" сделать типа "текст", то с помощью вычисления программа легко вставляет в него значение, а если сделать типа "связь", программа отказывается вставлять это значение.

2. И то же самое пытался сделать в обратном порядке от таблицы "клиенты" к таблице "заказы"

#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 15 Март 2013 - 16:31

Цитата

В таблице "заказ" сделал поле "имя клиента" типа "связь", и с помощью вычисления пытался вставить в него значение из поля "кто создал"
Получилось, что если поле "имя клиента" сделать типа "текст", то с помощью вычисления программа легко вставляет в него значение, а если сделать типа "связь", программа отказывается вставлять это значение.

У вас какие-то абсолютно неверные представления о полях в программе. В поле с типом "связь" хранится id связанной записи, а в поле "кто добавил" с типом "пользователь" - id пользователя программы. Ничего общего между ними нет.

#5 serg777

    Активный участник

  • Пользователи
  • PipPipPip
  • 44 сообщений

Отправлено 15 Март 2013 - 16:59

id пользователя программы связано c полем "кто добавил" в таблице "заказы", и одновременно "id пользователя" программы связано c полем "имя пользователя" типа "пользователь"в таблице "клиенты". И я хотел связать таблицу "заказы" с таблицей "клиенты". С помощью специального поля типа "связь" в таблице "клиенты".

Цитата

В поле с типом "связь" хранится id связанной записи, а в поле "кто добавил" с типом "пользователь" - id пользователя программы. Ничего общего между ними нет.

Ну хорошо, а что тогда делать, если нужно связать таблицу "клиентов" и таблицу с их заказами. Через какие поля связывать, через какие Id?


Подскажите, пожалуйста, что я делаю не так и как это сделать лучше. Я же не прошу, чтобы вы всё за меня сделали. Пожалуйста, не нужно писать, что у меня неправильные представления и всё. Я понимаю, что для вас было бы гораздо лучше, если бы я составил техзадание и полностью оплатил вам разработку и не задавал "глупых вопросов". Но, похоже, так могут далеко не все. И зачем тогда создавать форум тех поддержки? Просто, чтобы мягко намекать, что "вы ничего не понимаете, лучше добровольно довериться профессионалам"?

#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 15 Март 2013 - 18:22

Цитата

Ну хорошо, а что тогда делать, если нужно связать таблицу "клиентов" и таблицу с их заказами. Через какие поля связывать, через какие Id?

Так вы уже это сделали - создали поле с типом "связь" в таблице "заказы" с таблицей "клиенты". Если же речь о том, как автоматически заполнить это поле при добавлении заказа текущим клиентом с помощью вычисления, то это уже другой вопрос. Тут простым присвоением одного поля другому, как вы пытались делать, не обойтись. Алгоритм будет такой:
1. Находим клиента в таблице "клиенты" по его id пользователя, через запрос к бд
2. Присваиваем id найденного клиента в поле связи с клиентом

#7 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 15 Март 2013 - 18:23

Цитата

Подскажите, пожалуйста, что я делаю не так и как это сделать лучше. Я же не прошу, чтобы вы всё за меня сделали. Пожалуйста, не нужно писать, что у меня неправильные представления и всё. Я понимаю, что для вас было бы гораздо лучше, если бы я составил техзадание и полностью оплатил вам разработку и не задавал "глупых вопросов". Но, похоже, так могут далеко не все. И зачем тогда создавать форум тех поддержки? Просто, чтобы мягко намекать, что "вы ничего не понимаете, лучше добровольно довериться профессионалам"?

Не совсем понял причины ваших эмоций. Разумеется я ни на что не намекал, а всего лишь констатировал факт + объяснил причины ошибочной работы. Разве вам не это нужно было? Я не хозяин фирмы и мне без разницы, будете вы платно что-то заказывать или нет.

#8 serg777

    Активный участник

  • Пользователи
  • PipPipPip
  • 44 сообщений

Отправлено 15 Март 2013 - 22:00

Просмотр сообщенияCbCoder (15 Март 2013 - 18:22) писал:

Так вы уже это сделали - создали поле с типом "связь" в таблице "заказы" с таблицей "клиенты". Если же речь о том, как автоматически заполнить это поле при добавлении заказа текущим клиентом с помощью вычисления, то это уже другой вопрос. Тут простым присвоением одного поля другому, как вы пытались делать, не обойтись. Алгоритм будет такой:
1. Находим клиента в таблице "клиенты" по его id пользователя, через запрос к бд
2. Присваиваем id найденного клиента в поле связи с клиентом

Спасибо большое, вы очень доходчиво всё описали. Вы правы, с эмоциями я действительно перестарался.

#9 serg777

    Активный участник

  • Пользователи
  • PipPipPip
  • 44 сообщений

Отправлено 15 Март 2013 - 23:26

Цитата

Алгоритм будет такой:
1. Находим клиента в таблице "клиенты" по его id пользователя, через запрос к бд
2. Присваиваем id найденного клиента в поле связи с клиентом

А можно Вас попросить дать мне пример такого кода? А я уже попробую его сам адаптировать. А то меня очень сильно расстраивает, что я не могу с этой, казалось бы, не сложной задачей справиться.

#10 serg777

    Активный участник

  • Пользователи
  • PipPipPip
  • 44 сообщений

Отправлено 15 Март 2013 - 23:29

Меня в действительности очень вдохновило, что я нашел КБ. Ну вот пхп-кодинг...

#11 serg777

    Активный участник

  • Пользователи
  • PipPipPip
  • 44 сообщений

Отправлено 17 Март 2013 - 09:39

$rekv = data_table("Реквизиты","id={ID}");// получаем данные из текущей строки
$org = data_table("Контрагенты","id='".$rekv['Организация']."'");//получаем данные из таблицы "Контрагенты", где id равен $rekv['Организация']
return $org['Адрес'];

Я правильно понял, что мне нужно оттолкнуться от этого кода?

#12 serg777

    Активный участник

  • Пользователи
  • PipPipPip
  • 44 сообщений

Отправлено 18 Март 2013 - 11:30

такой вариант тоже не помог...



$data = data_table("Заказ","id=$ID");
$manager = $data['Автор'];
$sotr = data_table("Мои контактные данные","`Пользователь`='".$manager."'");
$boss = $sotr['E-mail'];
return $boss;

взял с этой страницы: http://clientbase.ru...16/php_samples/

#13 serg777

    Активный участник

  • Пользователи
  • PipPipPip
  • 44 сообщений

Отправлено 18 Март 2013 - 11:30

пожалуйста, подскажите, в чем ошибка

#14 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 18 Март 2013 - 12:44

Цитата

Я правильно понял, что мне нужно оттолкнуться от этого кода?

В целом да, вот только примеры вы взяли устаревшие. Там ведь написано по ссылке, что они для версии до 1.9.5. Или у вас на самом деле настолько старая версия программы?

Если нет, то, во-первых, получать данные из текущей строки запросом уже не нужно, все поля текущей строки лежат в переменной $line. Во-вторых, return сейчас тоже не используется, необходимо использовать прямое присвоение полю. Обо всем этом есть в текущей документации: http://clientbase.ru...6/calculations/

Т.о. по вашему вычислению будет примерно такой код:

$client = data_table("Контрагенты","`Пользователь`='".$line['Кто добавил']."'"); //получаем данные клиента из таблицы "Контрагенты", у которого поле "Пользователь" равно пользователю из поля "Кто добавил" текущей заявки
$line['Клиент'] = $client['ID']; // заполняем поле связи "Клиент" текущей заявки значением из поля "ID" найденного нами клиента


#15 serg777

    Активный участник

  • Пользователи
  • PipPipPip
  • 44 сообщений

Отправлено 18 Март 2013 - 14:08

Супер, получилось, огромное спасибо!





Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных