Автонумерация связанной таблицы
#1
Отправлено 09 Апрель 2012 - 17:43
В "Приложении договора" есть поле "Номер приложения" - тут должна быть автонумерация. И у каждого договора этот список должен начинатся с ссамого начала (с 1).
Сейчас авто нумерация работает по всей таблице "Приложения договора", а нужно только к той части которая связана с конкретным договором.
Пробовал через вычисления. Никак не получается заставить работать.
#2 Гость_Roman_*
Отправлено 09 Апрель 2012 - 20:48
if (!$line['Номер приложения']) // Если поле номер не заполнено... { // Выбираем максимальный номер из подтаблицы по полю связи. $sqlQuery = "SELECT MAX(`f222`) AS `max_num` FROM `".DATA_TABLE."333` WHERE `f444`='".$line['Договор']['Номер']."'"; $result = mysql_query($sqlQuery); $row = mysql_fetch_assoc($result); $line['Номер приложения'] = $row['max_num'] + 1; }Примерно так.
#3
Отправлено 10 Апрель 2012 - 03:57
Сейчас протестирую данный вариант. Спасибо!
#4
Отправлено 10 Апрель 2012 - 04:29
if (!$line['Номер приложения']) { $sqlQuery = "SELECT MAX(`f1212`) AS `max_num` FROM `".DATA_TABLE."93` WHERE `f1211`='".$line['Договор']['Номер']."'"; $result = mysql_query($sqlQuery); $row = mysql_fetch_assoc($result); $line['Номер приложения'] = $row['max_num'] + 1; }и так тоже:
if (!$line['Номер приложения']) // Если поле номер не заполнено... { // Выбираем максимальный номер из подтаблицы по полю связи. $sqlQuery = "SELECT MAX(`f1212`) AS `max_num` FROM `".DATA_TABLE."93` WHERE `f1211`='".$line['Номер договора']."'"; $result = mysql_query($sqlQuery); $row = mysql_fetch_assoc($result); $line['Номер приложения'] = $row['max_num'] + 1; }
где:
f1211 - Поле "Номер договора" (связанное с таблицей "Договор", по полю "Номер")
f1212 - поле "Номер приложения" (тип поля Номер, с пустым значением по умолчанию)
93 - таблица "Приложения к договору" (таблица связанная с договором (договор - номер) по полю "номер договора".
При добавлении новой строки "Номер приложения" всегда равен 1.
Update: max_num почему то всегда равен 0
Сообщение отредактировал etpu: 10 Апрель 2012 - 05:25
#5 Гость_Roman_*
Отправлено 10 Апрель 2012 - 07:12
$line['Договор']['raw']
#6
Отправлено 10 Апрель 2012 - 08:04
#7 Гость_Roman_*
Отправлено 10 Апрель 2012 - 08:09
$sqlQuery = "SELECT MAX(`f1212`) AS `max_num` FROM `".DATA_TABLE."93` WHERE `f1211`='".$line['Договор']['raw']."'";
#8
Отправлено 10 Апрель 2012 - 08:58
Я ведь правильно понимаю что в MAX(`f1212`) должно быть поле "Номер приложения" . Но тут вроде бы все правильно, ведь если я удалю
WHERE `f1211`='".$line['Договор']['raw']."'
То значение будет появляться правильное (26.... 27....28... и тд)
То есть по всей таблице.
Значит проблема как раз в коде указанном выше.
$sqlQuery = "SELECT MAX(`f1212`) AS `max_num` FROM `".DATA_TABLE."93` WHERE status=0 and `f1211`=1";
Прописываю так то в договоре под номером 1 все работает как надо.
А если прописываю так:
$sqlQuery = "SELECT MAX(`f1212`) AS `max_num` FROM `".DATA_TABLE."93` WHERE status=0 and `f1211`='".$line['Номер договора']."'";То все перестает работать и выдает только 1.
Update
Вычисление работает в подтаблице "Приложения к договору".
И что странно, когда я задал
$line['Номер приложения'] = $line['Договор']['Номер']; или $line['Номер приложения'] = $line['Номер договора'];в Поле "Номер приложения" ничего не добавлялось.
Сообщение отредактировал etpu: 10 Апрель 2012 - 09:06
#9 Гость_Roman_*
Отправлено 10 Апрель 2012 - 09:05
print_r($line);Я ещё не совсем понял как у Вас называется поле, по которому идёт связь с договором. В одном вычислении Вы пишите 'Номер договора', в другом - используете то название, которое я написал для примера. Если поле называется "Номер договора", возможно, стоит использовать $line['Номер договора']['raw'] в качестве условия запроса.
#10
Отправлено 10 Апрель 2012 - 09:09
Не совсем понятно куда вставить print_r($line);
#11 Гость_Roman_*
Отправлено 10 Апрель 2012 - 09:13
etpu (10 Апрель 2012 - 09:09) писал:
Не совсем понятно куда вставить print_r($line);
#12
Отправлено 10 Апрель 2012 - 09:20
Главная таблица "Договор" и в ней поле "Номер".
Подтаблица Приложения к договору и там поле связи "Номер договора".
Насколько я понимаю названия ведь не должны совпадать. и все равно по поводу строчка с принтом не понял. Вставил её в начало вычисления, но где посмотреть результат?
#13
Отправлено 10 Апрель 2012 - 09:25
if (!$line['Номер приложения']) // Если поле номер не заполнено... { // Выбираем максимальный номер из подтаблицы по полю связи. $sqlQuery = "SELECT MAX(`f1212`) AS `max_num` FROM `".DATA_TABLE."93` WHERE status=0 and `f1211`='".$line['Номер договора']['raw']."'"; $result = mysql_query($sqlQuery); $row = mysql_fetch_assoc($result); $line['Номер приложения'] = $row['max_num'] + 1;
А что такое ['raw'] и для чего оно нужно?
Сообщение отредактировал etpu: 10 Апрель 2012 - 09:27
#14 Гость_Roman_*
Отправлено 10 Апрель 2012 - 09:28
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных