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


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


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

#1 aleks.goodcolor

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

  • Пользователи
  • PipPipPip
  • 198 сообщений
  • Пол:Мужчина
  • Город:Йошкар-ола

Отправлено 08 Июль 2014 - 09:11

Задача состоит в том, чтобы в цикле передать полю в строке значение переменной.
Мой код:

$res2 = data_select(46, "`status`=0 AND `f3710`=",$line['Пользователь'],"");
while ($row2 = sql_fetch_assoc($res2))
{
  $row2['замена'] = $rand_row['f1400'];// как я понимаю в row2 хранится строка, я беру строку и хочу туда записать значение переменной.
}

Сообщение отредактировал aleks.goodcolor: 08 Июль 2014 - 09:12


#2 CbCoder

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

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

Отправлено 08 Июль 2014 - 09:31

В чем смысл многократного перезаписывания в цикле переменной? Вы же никуда ее не передаете потом? И откуда у вас $rand_row берется? В коде она нигде не определена.

С точки зрения программной логики какая-то совершенная бессмыслица.

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

#3 aleks.goodcolor

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

  • Пользователи
  • PipPipPip
  • 198 сообщений
  • Пол:Мужчина
  • Город:Йошкар-ола

Отправлено 08 Июль 2014 - 09:38

Задача такая что если поле "замена" = поле "пользователь" и незачет=да, то поле замена необходимо заменить на поле "штраф". Нужно пройтись по всей таблице и заменить поля если удовлетворяет условию.

Код целиком:

if ($line['незачет'] === 'да')
{
$res = data_select(46, "`status`=0 AND `f3720`='нет'");
while ($row = sql_fetch_assoc($res)) // цикл чтения строк из массива сверху, каждая строка читается в $row
{
   $mas[] = $row; // а тут помещаем очередной считанный $row в массив $mas как новый элемент этого массива
}
$rand_key = array_rand($mas, 1); // функция array_rand возвращает КЛЮЧ массива, а не элемент (см. описание функции)
$rand_row = $mas[$rand_key]; // поэтому чтобы получить элемент массива, нужно подставить полученный ключ
$line['штраф'] = $rand_row['f1400'];

$res2 = data_select(46, "`status`=0 AND `f3710`=",$line['Пользователь'],"");
while ($row2 = sql_fetch_assoc($res2))
{
  $row2['замена'] = $rand_row['f1400'];
}

}
if ($line['незачет'] ==='нет')
{
$line['штраф'] = NULL;
}

Сообщение отредактировал aleks.goodcolor: 08 Июль 2014 - 09:39


#4 CbCoder

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

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

Отправлено 08 Июль 2014 - 10:18

Цитата

Задача такая что если поле "замена" = поле "пользователь" и незачет=да, то поле замена необходимо заменить на поле "штраф"

Не понял формулировки, что значит "поле замена заменить на поле штраф"? Как можно заменить одно поле на другое? Можно заменить значение поля на другое, например взятое из другого поля. Надеюсь, вы это имели ввиду? Но и в этом случае непонятно, как вы хотите в поле с типом "пользователь" "замена" записать штраф, которое представляет из себя число? Тут либо я что-то не так понял, либо вы что-то напутали.

Если речь все же о замене значения поля в определенных строках (но без вышеописанной коллизии в полях и типах), то для этого используется запрос на обновление (UPDATE), реализуемый у нас через функцию data_update. Простое присвоение переменной, как у вас выше, естественно ничего не даст.

#5 aleks.goodcolor

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

  • Пользователи
  • PipPipPip
  • 198 сообщений
  • Пол:Мужчина
  • Город:Йошкар-ола

Отправлено 08 Июль 2014 - 10:18

Убрал цикл - добавил update_data, вроде работает.

if ($line['незачет'] === 'да')
{
$res = data_select(46, "`status`=0 AND `f3720`='нет'");
while ($row = sql_fetch_assoc($res)) // цикл чтения строк из массива сверху, каждая строка читается в $row
{
   $mas[] = $row; // а тут помещаем очередной считанный $row в массив $mas как новый элемент этого массива
}
$rand_key = array_rand($mas, 1); // функция array_rand возвращает КЛЮЧ массива, а не элемент (см. описание функции)
$rand_row = $mas[$rand_key]; // поэтому чтобы получить элемент массива, нужно подставить полученный ключ
$line['штраф'] = $rand_row['f1400'];
data_update(46, array('f3710'=>$line['штраф']), "`f3710`='",$line['Пользователь'],"'");
}
if ($line['незачет'] ==='нет')
{
$line['штраф'] = NULL;
}

UPD: поле штраф типа "пользователь"

Сообщение отредактировал aleks.goodcolor: 08 Июль 2014 - 10:19


#6 CbCoder

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

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

Отправлено 08 Июль 2014 - 10:26

Да, теперь все верно.





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

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