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


Вычисление


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

#1 TelecomMedia

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

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

Отправлено 03 Март 2015 - 09:05

1. Есть доп. действие:
$result = data_select_field(931, "f22451 as ank_rec", "status=0 AND f22141=",$line['Телефон']); // f22451 - номер заявки, f22141 - поле телефон 

$line['id заявка'] = $row['ank_rec'];
Вычисление работает корректно, если значения полей "телефон" совпадает, то в поле "id заявка" записывается номер заявки.

Сделал второе, вычисление, которое ищет связь не по телефону, а по почте:

$result = data_select_field(931, "f22451 as mail_rec", "status=0 AND f22151=",$line['E-mail']); // f22151 - поле E-mail
$row = sql_fetch_assoc($result);
$line['id заявка'] = $row['mail_rec'];

Данное вычисление не работает корректно, а всегда возвращает "4", хотя код абсолютно идентичен.

2. Получив номер заявки в текстовое поле "id заявка", его необходимо перенести в поле "Заявка" (оно являются полем связи с полем f22451 таблицы 931).
Использовал код:

$line['Заявка']['№ заявки'] = $line['id заявка'];

Однако, я заметил, что в некоторых записях из-за кода поменялись номера заявок. Могло это случиться, если, например, номер телефона в таблице откуда делался запрос был пустым (или записан в неправильном формате) и вычисление нашло связи со всеми записями, в которых номер телефона также был пустым (имеется ввиду в т. 931)?

3. И из второго вопроса вытекает следующий: как сделать проверку номера при выполнении запроса? Т.е. если поле "Телефон" заполнено в формате (7ХХХХХХХХХХХ), то делать поиск...

#2 CbCoder

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

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

Отправлено 03 Март 2015 - 10:04

1. Любые текстовые поля (вернее их значения) должны быть в кавычках:

$result = data_select_field(931, "f22451 as mail_rec", "status=0 AND f22151='",$line['E-mail'],"'");

Иначе, в случае наших функций data_*, значение будет считаться числовым и приведено к числу (скорее всего к нулю). В случае обычного запроса это вообще привело бы к ошибке SQL.

2. Не совсем понял вопроса. "Однако, я заметил, что в некоторых записях из-за кода поменялись номера заявок" - так вы же сами его и меняете данным кодом? Что не так то? Или вам нужно не номер менять в связанной записи, а сменить саму связь? Тогда код априори неверный. В этом случае менять нужно значение непосредственно поля связи, а не его "подполей".

3. Вам не проверка формата номера скорее всего нужна, а правильное его задание в запросе (см. пункт 1).

#3 TelecomMedia

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

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

Отправлено 03 Март 2015 - 10:19

1. Спасибо, работает.

2. Мне необходимо в поле связи скопировать значение из текстового поля.
Например,
В текстовом поле "id заявка" имеем значение 4071, так вот в поле "Заявка" (поле связи) скопировать туда номер 4071, чтобы оно ссылалось на заявку 4071 в т. 931.
Вычисление, которое я привел в пример, мне посоветовали на форуме,я его и использовал)
Такой код работать соответственно тоже не будет:
$line['Заявка']= $line['id заявка'];

#4 CbCoder

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

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

Отправлено 03 Март 2015 - 10:47

Это как раз и есть смена связи, вы меняете саму связь (ссылку, как вы назвали) с одной заявки на другую. У вас же код выше менял не связь, а номер в текущей связанной записи, как я уже сказал. И новый код разумеется тоже неверен (точнее, верной является только левая часть, т.е. замена связи), т.к. нельзя "в поле связи скопировать значение из текстового поля" - это совершенно разные типы полей. В поле связи хранится id связанной записи, именно его и нужно копировать. Т.е., в применении к вашей задаче это будет следующий код:

$result = data_select_field(931, "id", "status=0 AND f22141='",$line['Телефон'],"'");
$row = sql_fetch_assoc($result);
$line['Заявка'] = $row['id']; // копируем в поле связи id найденной записи, связь меняется на нее


#5 TelecomMedia

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

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

Отправлено 03 Март 2015 - 11:20

Понял.


$result1 = data_select_field(931, "id", "status=0 AND f22141='",$line['Телефон'],"'");
$row1 = sql_fetch_assoc($result1); // если совпадает телефон, то копируем в массив row1

$result2 = data_select_field(931, "id", "status=0 AND f22151='",$line['E-mail'],"'");
$row2 = sql_fetch_assoc($result2); // если совпадает почта, то копируем в массив row2

if ($row1 != ''){
$line['Заявка'] = $row1['id']; // если нашлось совпадение по телефону
} else {
$line['Заявка'] = $row2['id']; // если по телефону не нашлось, то наверняка нашлось по почте
}

1. Сверяю записи по телефону, если есть совпадение, то записываю в массив row1.
2. Далее - сверяю по почте. Если есть совпадение - записываю в row2.
3. Далее - если найдена связь по телефону (приоритетное условие), то записываем row1 в поле Заявка.
4. Если связи по телефону нет, то записываем row2 в поле Заявка.
5. Если ни там, ни там связи нет, то ничего не записываем.

Исходя из этой логики правильно ли написано вычисление?

#6 CbCoder

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

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

Отправлено 03 Март 2015 - 11:50

В целом правильно, за исключением частностей. Например, 5 пункт строго не выполняется, у вас это следствие 4-го пункта, когда запишется пустота в случае не найденной по почте записи. Если же вам нужно именно ничего не записывать (например, оставить старое значение), то вместо else должно быть elseif ($row2 != ''). В остальном только придирки по структуре, которые на результат не влияют.

#7 TelecomMedia

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

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

Отправлено 03 Март 2015 - 12:13

Спасибо,

еще такой вопрос: если при запросе окажется, что в т. 931 найдено, например, 2 совпадения по номеру телефона. Что тогда произойдет?

#8 CbCoder

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

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

Отправлено 03 Март 2015 - 14:49

В данном коде берется только первая найденная запись, не важно сколько их всего.





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

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