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


Вычисление


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

#1 alexandr2194

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

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

Отправлено 19 Июнь 2015 - 00:08

Добрый день!
Есть таблицы "Договор", "Счет" и "Категория"
в таблице "Счет" есть поле-связь "Категория", которая ссылается, соответственно, на "Название категории" в таблице "Категория". Дальше. В таблице "Договор" есть доп. Действие "Добавить договор". В доп. действии выбирается категория. И нужно сделать проверку, чтобы в таблице "Счет" существовала запись, что именно этот клиент, с кем мы заключаем договор, имел счет по этой категории и поле "оплачено" было бы не 0.
В самом коде я пишу:

$tabN = get_table_id_by_name('Счета');
$c=data_select_field($tabN,'`f838` as kat',"`f839`='",$line['Клиент']['ФИО клиента'],"'");

Иначе говоря : SELECT `КАТЕГОРИЯ` AS KAT FROM СЧЕТА WHERE `НА КОГО`=$line['Клиент']['ФИО клиента'];

"НА КОГО" - поле, показывающее на кого был выписан счет.

$C1=C['KAT'];
и в c1 ничего нет.

как мне все таки достать данные?

#2 CbCoder

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

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

Отправлено 19 Июнь 2015 - 09:26

Во-первых, в полях связи всегда хранится ID записи, вне зависимости от выбранного для отображения поля, поэтому $line['Клиент']['ID'], а не $line['Клиент']['ФИО клиента'],
Во-вторых, в переменной $c поля будут под внутренними именами (f111), поэтому $C1=C['KAT']; выдаст пустоту, плюс вы забыли знак доллара перед C.

#3 alexandr2194

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

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

Отправлено 19 Июнь 2015 - 15:46

$c=data_select_field(46,'`f483`');
echo "<script>k_answer_hide_form$qst_id=0; alert('".$c['f483']."')</script>";

так не работает. что мне в $с['????'] писать?

#4 CbCoder

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

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

Отправлено 19 Июнь 2015 - 17:42

Погодите, извиняюсь, не заметил что у вас в запросе стояло '`f838` as kat'. Тогда все верно у вас было в первоначальном варианте в плане имени поля, только регистр зачем-то прокапсован. Ключи массива чувствительны к регистру.

$tabN = get_table_id_by_name('Счета');
$c = data_select_field($tabN, "`f838` as kat", "`f839`=",$line['Клиент']['ID']);
$c1 = $c['kat'];

Не совсем правда понял, зачем вам в коде городить конструкцию $tabN = get_table_id_by_name('Счета'), проще и надежнее сразу подставить id таблицы Счета в data_select_field.

#5 alexandr2194

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

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

Отправлено 21 Июнь 2015 - 11:55

Спасибо. еще такой вопрос:
вот код. вроде должен работать.
$c = data_select_field(43,"`f838` as kat");
var_dump($c);
$c1 = $c['kat'];

var_dump выдает следующее:
array(3) { ["result"]=> resource(151) of type (mysql result) ["db_type"]=> string(5) "mysql" ["table_name"]=> string(0) "" }
а при попытке вывести $c1 выводит пустоту все равно.Если что, поле 838 - связь.
спасибо

#6 CbCoder

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

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

Отправлено 22 Июнь 2015 - 09:23

Да, тут тоже недоглядел сразу. Функция data_select_field возвращает ресурс, а не запись. Т.е. нужна еще sql_fetch_assoc:

$res = data_select_field(43,"`f838` as kat");
$c = sql_fetch_assoc($res);
$c1 = $c['kat'];


#7 alexandr2194

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

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

Отправлено 22 Июнь 2015 - 14:50

Спасибо.
А что делать с полем "группа"?
я хочу выбрать записи по группе доступа Директор.
поле имеет номер f555
я пишу
$res = data_select(46, "`f555`='Директор'");
$cnt=0;
while ($c= sql_fetch_assoc($res))
{
  $cnt=$cnt+1;
  echo "<script>k_answer_hide_form$qst_id=0; alert('".$c['f1410']."')</script>";
}


#8 alexandr2194

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

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

Отправлено 22 Июнь 2015 - 14:52

А выводит вообще тех людей, кого нет в таблице сотрудники (46)

#9 CbCoder

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

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

Отправлено 22 Июнь 2015 - 15:46

В полем с типом "группа" хранится id группы доступа, а не ее название в виде текста (как у вас в запросе). Это по сути то же поле связи, только с системной таблицей.

#10 alexandr2194

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

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

Отправлено 22 Июнь 2015 - 16:05

понял, спасибо)
хочется доделать уже, а многих вещей не знаю, недавно начал пользоваться)
я Вас уже достал, наверное, но скажите, пожалуйста еще такую вещь:
$res = data_select(46, "`f555`=1021 and status='0'");
$cnt=0;
while ($c= sql_fetch_assoc($res))
{
  $cnt=$cnt+1;
  $org = data_select(50, "`f932`='".$c['f711']."' and status='0'");
  $r = sql_fetch_assoc($org);
  while ($r= sql_fetch_assoc($res))
  {
	  echo "<script>k_answer_hide_form$qst_id=0; alert('".$c['f1420']."')</script>";
  }
  echo "<script>k_answer_hide_form$qst_id=0; alert('".$c['f711']."')</script>";
}

вот код. там получается в каждом проходе цикла я достаю ID компании(f711) и хочу из таблицы Компании (50) взять название компании. и я внутри цикла делаю еще один подзапрос, где я выбираю данные из "Компании". но ничего опять не работает:(

#11 alexandr2194

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

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

Отправлено 22 Июнь 2015 - 16:10

ой
немного не так
но все равно не работает
$res = data_select(46, "`f555`=1021 and status='0'");
$cnt=0;
while ($c= sql_fetch_assoc($res))
{
  $cnt=$cnt+1;
  $org = data_select(50, "`f932`='".$c['f711']."' and status='0'");
  while ($r = sql_fetch_assoc($org))
  {
	  echo "<script>k_answer_hide_form$qst_id=0; alert('".$r['f1420']."')</script>";
  }
  echo "<script>k_answer_hide_form$qst_id=0; alert('".$c['f711']."')</script>";
}


#12 CbCoder

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

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

Отправлено 22 Июнь 2015 - 16:40

Если вы достаете id из поля f711 (это поле связи?), то почему в запросе к таблице 50 вы приравниваете его к полю f932, а не собственно к id? В чем логика?

#13 alexandr2194

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

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

Отправлено 22 Июнь 2015 - 17:14

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

вот такая цепочка Сотрудники(где группа=директор)=>компания =>населенные пункты (наименование)
$res = data_select(46, "`f555`=1021 and status='0'");
$cnt=0;
while ($c= sql_fetch_assoc($res))
{
  $cnt=$cnt+1;
  $org = data_select(50, "`id`=".$c['f711']);
  while ($r = sql_fetch_assoc($org))
  {
	  $town = data_select(471, "`id`=".$r['f14081']);
	  while($t=sql_fetch_assoc($town))
	  {
		  echo "<script>k_answer_hide_form$qst_id=0; alert('".$t['f11041']."')</script>";
	  }
  }
}

все выводит правильно. иначе говоря, выводит города всех компаний к каким приписан директор.
теперь: есть в "населенных пунктах" поле "альтернативные названия". оно типа текст, но многострочное
$res = data_select(46, "`f555`=1021 and status='0'");
$cnt=0;
while ($c= sql_fetch_assoc($res))
{
  $cnt=$cnt+1;
  $org = data_select(50, "`id`=".$c['f711']);
  while ($r = sql_fetch_assoc($org))
  {
	  $town = data_select(471, "`id`=".$r['f14081']);
	  while($t=sql_fetch_assoc($town))
	  {
		  echo "<script>k_answer_hide_form$qst_id=0; alert('".$t['f11051']."')</script>";
	  }
  }
}

но теперь ничего не выводит. изменил только имя столбца

#14 alexandr2194

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

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

Отправлено 22 Июнь 2015 - 17:16

точнее выводит пустоту для всех городов

#15 CbCoder

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

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

Отправлено 23 Июнь 2015 - 11:00

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

#16 alexandr2194

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

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

Отправлено 23 Июнь 2015 - 23:36

спасибо.
теперь, есть таблица "клиенты", в ней есть поле "менеджер" типа "пользователь". я, с вашей помощью, нашел фамилию менеджера. как мне в это поле поставить того, кого я нашел?
$line['менеджер']=$person не работает.

#17 CbCoder

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

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

Отправлено 24 Июнь 2015 - 09:15

Так не фамилия нужна, а id пользователя...





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

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