1 / 1 / 0
Регистрация: 18.12.2011
Сообщений: 13

Обновление записей (заполнение пустых ячеек значением предыдущей записи)

27.02.2012, 11:33. Показов 6781. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется таблица в MySql-е такого вида(смотрите вложение)
Как заполнить пустые ячейки значением предыдущей записи?(смотрите вложение2)

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

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$p=0;
for($q=0;$q<400;$q+=1)
{
  $result1 = mysql_query("SELECT dt FROM `mytabl` WHERE NOT dt='' LIMIT 0,1 ");
  $line1 = mysql_fetch_array($result1);
            
                $result = mysql_query("SELECT n FROM `mytabl` WHERE dt='' LIMIT $p,11 ");
                while ($line = mysql_fetch_array($result)) 
                {
                $Result2 = mysql_query("UPDATE `mytabl` SET dt= '$line1[dt]' WHERE dt = '' ");
                    //  echo "<table>\n$line1[dt]";
                    //  echo "<table>\n$line[n]";
                }
            
                $p+=11;
                       //echo "<table>\n-----";
            
}
Миниатюры
Обновление записей (заполнение пустых ячеек значением предыдущей записи)   Обновление записей (заполнение пустых ячеек значением предыдущей записи)   Обновление записей (заполнение пустых ячеек значением предыдущей записи)  

0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.02.2012, 11:33
Ответы с готовыми решениями:

Заполнение пустых ячеек
Добрый день! Не как не получается сделать автоматическое заполнение ячеек Во вложение видно что мне необходимо сделать По моей...

Заполнение пустых ячеек
есть столбец один там написаны арктикулы в формате &quot;237773&quot; во втором столбце &quot;0237773&quot;. (так же может быть &quot;89&quot; и...

Заполнение пустых ячеек
Подскажите пож-та как заполнить все ячейки, мой код заполняет только одну ячейку Set dbs = CurrentDb Set rst =...

15
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
27.02.2012, 15:16
Два запроса:
SQL
1
2
3
SET @LAST = NULL;
 
UPDATE `test` SET `dt` = (@LAST := IF(`dt` IS NOT NULL, `dt`, @LAST)) WHERE 1 ORDER BY `n`;
0
1 / 1 / 0
Регистрация: 18.12.2011
Сообщений: 13
28.02.2012, 11:13  [ТС]
Выполнил эти запросы, но ничего не изменилось.
0
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
28.02.2012, 14:23
может так поступить, выташить все id (у тя это поле называется n как я понял), у которых dt != '' и циклом пройтись не 0 до 400, ведь кол-во данных возможно у тя могут имзениться, а по массиву id'шек.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Вытаскиваем все id (т.е., n)
$result = mysql_query("SELECT n FROM `mytabl`");    //  WHERE dt = ''
$line_id = mysql_fetch_array($result);
 
// Теперь циклом проходим по массиву $line_id
foreach ($line_id as $val)
{
     // Вытаскиваем первый заполненный dt
    $result_dt = mysql_query("SELECT dt FROM `mytabl` WHERE n = $val[n] LIMIT 1");
    $line_dt = mysql_fetch_array($result_dt);
 
    // и обновляем
    $Result2 = mysql_query("UPDATE `mytabl` SET dt= '$line_dt[dt]'");   //  WHERE dt = '' 
}
0
1 / 1 / 0
Регистрация: 18.12.2011
Сообщений: 13
28.02.2012, 16:01  [ТС]
Устанавливает во всех полях значение '1.01.2012'

Попробовал так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Вытаскиваем все id (т.е., n)
$result = mysql_query("SELECT n FROM `timenamaz` WHERE dt != ''");    //  WHERE dt = ''
$line_id = mysql_fetch_array($result);
 $p=1;
// Теперь циклом проходим по массиву $line_id
foreach ($line_id as $val)
{
     // Вытаскиваем первый заполненный dt
    $result_dt = mysql_query("SELECT dt FROM `timenamaz` WHERE n = $val[n] LIMIT $p,1");
    $line_dt = mysql_fetch_array($result_dt);
 
    // и обновляем
    $Result2 = mysql_query("UPDATE `timenamaz` SET dt= '$line_dt[dt]' LIMIT 12");   //  WHERE dt = '' 
    $p++;
}
во всех полях устанавливает '' -пустоту

Добавлено через 20 минут
разные варианты проверил ,но как будто цикл проходит только один раз и все
0
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
28.02.2012, 16:24
а так
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Вытаскиваем все id (т.е., n)
$result = mysql_query("SELECT n FROM `mytabl`");    //  WHERE dt = ''
$line_id = mysql_fetch_array($result);
 
// Теперь циклом проходим по массиву $line_id
foreach ($line_id as $k => $val)
{
     $$k = $val['n'] - 1;
     if ($k != 0)
     {
         // Вытаскиваем первый заполненный dt
         $result_dt = mysql_query("SELECT dt FROM `mytabl` WHERE n = $k LIMIT 1");
         $line_dt = mysql_fetch_array($result_dt);
     }
 
    // и обновляем
    $Result2 = mysql_query("UPDATE `mytabl` SET dt= '$line_dt[dt]'  WHERE n = $val[n]");   //  WHERE dt = '' 
}
0
1 / 1 / 0
Регистрация: 18.12.2011
Сообщений: 13
28.02.2012, 17:44  [ТС]
Цитата Сообщение от Love_and_Peace Посмотреть сообщение
а так
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Вытаскиваем все id (т.е., n)
$result = mysql_query("SELECT n FROM `mytabl`");    //  WHERE dt = ''
$line_id = mysql_fetch_array($result);
 
// Теперь циклом проходим по массиву $line_id
foreach ($line_id as $k => $val)
{
     $$k = $val['n'] - 1;
     if ($k != 0)
     {
         // Вытаскиваем первый заполненный dt
         $result_dt = mysql_query("SELECT dt FROM `mytabl` WHERE n = $k LIMIT 1");
         $line_dt = mysql_fetch_array($result_dt);
     }
 
    // и обновляем
    $Result2 = mysql_query("UPDATE `mytabl` SET dt= '$line_dt[dt]'  WHERE n = $val[n]");   //  WHERE dt = '' 
}
Очищает первую строку.

Эта моя укороченная база:
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
CREATE TABLE IF NOT EXISTS `Mytable` (
  `n` INT(11) NOT NULL AUTO_INCREMENT,
  `dt` VARCHAR(255) NOT NULL,
  `city` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`n`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=19 ;
 
 
 
INSERT INTO `Mytable` (`n`, `dt`, `city`) VALUES
(1, '1.01.2012', '1'),
(2, '', '2'),
(3, '', '3'),
(4, '', '4'),
(5, '', '5'),
(6, '', '6'),
(7, '', '7'),
(8, '', '8'),
(9, '', '8'),
(10, '', '9'),
(11, '', '10'),
(12, '', '11'),
(13, '', '12'),
(14, '2.01.2012', '1'),
(15, '', '2'),
(16, '', '3'),
(17, '', '4'),
(18, '', '5');
0
 Аватар для __PION__
960 / 801 / 85
Регистрация: 21.07.2010
Сообщений: 3,522
28.02.2012, 17:59
Цитата Сообщение от jjsf Посмотреть сообщение
Как заполнить пустые ячейки значением предыдущей записи?(смотрите вложение2)
jjsf, я щас подумал, а разве при таком условии какое ты задаешь, не будет во всех ячейках однаковое значение? В самом деле - берешь значение из перевой строки и подставляешь во вторую, а вторую в третью ...
зачем такой гемор(?) возьми первое значние и подставь во все.
или условие задачи не верное
0
1 / 1 / 0
Регистрация: 18.12.2011
Сообщений: 13
29.02.2012, 10:16  [ТС]
Цитата Сообщение от Love_and_Peace Посмотреть сообщение
jjsf, возьми первое значние и подставь во все.
или условие задачи не верное
Попробую заново объяснить задачу:
нужно взять первое не пустое значение столбца dt и подставить в следующие пустые строки(столбца dt) до тех пор, пока не встретится строка с не пустым значением.
Если встретится строка с не пустым значением, то нужно значение этой строки подставить в следующие пустые строки,до тех пор, пока не встретится строка с не пустым значением. И т.д.

Или же так.:
строки 1,13,25,37,... не пустые
строки 2-12,14-24,26-36 пустые

значение 1 строки нужно подставить в 2-12 строки
значение 2 строки нужно подставить в 14-24 строки
и т.д.

В вложении 1 привел часть таблицы -как есть.
В вложении 2 привел часть таблицы - что в итоге должно быть.


SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
CREATE TABLE IF NOT EXISTS `Mytable` (
  `n` INT(11) NOT NULL AUTO_INCREMENT,
  `dt` VARCHAR(255) NOT NULL,
  `city` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`n`)
) ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=19 ;
 
 
INSERT INTO `Mytable` (`n`, `dt`, `city`) VALUES
(1, '1.01.2012', '1'),
(2, '', '2'),
(3, '', '3'),
(4, '', '4'),
(5, '', '5'),
(6, '', '6'),
(7, '', '7'),
(8, '', '8'),
(9, '', '9'),
(10, '', '10'),
(11, '', '11'),
(12, '', '12'),
(13, '2.01.2012', '1'),
(14, '', '2'),
(15, '', '3'),
(16, '', '4'),
(17, '', '5'),
(18, '', '6');
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
29.02.2012, 19:26
Цитата Сообщение от jjsf Посмотреть сообщение
Выполнил эти запросы, но ничего не изменилось.
Как выполняли? Какие были ошибки? Наличие ошибок вообще проверяли после выполнения?
0
1 / 1 / 0
Регистрация: 18.12.2011
Сообщений: 13
01.03.2012, 16:58  [ТС]
Vovan-VE, и в phpmyadmin выполнял пишет Your SQL query has been executed successfully , но ничего не обновляет.
и в php выполнял. Ошибок нет, но также ничего не обновляет.
PHP
1
2
$result = mysql_query("SET @last = NULL");
$result1 = mysql_query("UPDATE `Mytable` SET `dt` = (@last := IF(`dt` IS NOT NULL, `dt`, @last)) WHERE 1 ORDER BY `n`")
Добавлено через 5 часов 52 минуты
Решил задачу.
так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
 $result1 = mysql_query("SET @a=''");
    $result = mysql_query("SELECT n,(CASE dt WHEN '' THEN @a ELSE @a := dt END) as dt,city FROM Mytable");
 
     print "<table>\n";
        while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
            print "\t<tr>\n";
            foreach ($line as $col_value) {
      print "\t\t<td>$col_value</td>\n";
            }
            print "\t</tr>\n";
        }
        print "</table>\n";
вывел все на экран. Скопировал на текстовый документ , подкорректировал под sql запрос, выполнил этот запрос и ВСЕ.
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
01.03.2012, 17:33
jjsf, Какая версия MySQL?
0
1 / 1 / 0
Регистрация: 18.12.2011
Сообщений: 13
01.03.2012, 17:42  [ТС]
Цитата Сообщение от Vovan-VE Посмотреть сообщение
jjsf, Какая версия MySQL?
3.2.3
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
01.03.2012, 17:52
Цитата Сообщение от jjsf Посмотреть сообщение
3.2.3
+1

Добавлено через 58 секунд
Это же где Вы такое чудо откопали-то?
0
1 / 1 / 0
Регистрация: 18.12.2011
Сообщений: 13
01.03.2012, 19:16  [ТС]
Vovan-VE,
неделю назад скачал Денвер .Вот с ним и MySql.

Думаешь этот код
SQL
1
2
SET @LAST = NULL"
UPDATE `Mytable` SET `dt` = (@last := IF(`dt` IS NOT NULL, `dt`, @last)) WHERE 1 ORDER BY `n`
не работал из за старой версии Mysql?

Если да ,то вот этот код
SQL
1
2
SET @a=''"
SELECT n,(CASE dt WHEN '' THEN @a ELSE @a := dt END) as dt,city FROM Mytable
работает же.

А в чем разница то?
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
01.03.2012, 19:29
Цитата Сообщение от jjsf Посмотреть сообщение
неделю назад скачал Денвер
Даже страшно спрашивать, где Вы его скачали. См. официальный сайт http://www.denwer.ru/
Цитата Сообщение от jjsf Посмотреть сообщение
не работал из за старой версии Mysql?
Пока это единственное разумное объяснение из возможных.
Цитата Сообщение от jjsf Посмотреть сообщение
А в чем разница то?
Там SELECT, а там UPDATE.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.03.2012, 19:29
Помогаю со студенческими работами здесь

Вставка пустых ячеек (строк) после ячейки с определённым значением
Здравствуйте! Хотелось бы попросить помощи по моей проблеме. Есть таблица, в ней всё в один столбик. Очень нужно, что бы после ячеек...

Автоматическое заполнение пустых ячеек
Добрый день! Необходима помощь. Для оптимизации работы необходимо автоматически заполнять пустые ячейки в таблице. Т.е. не выделять...

Заполнение пустых ячеек по формуле
Ку, все пытался хоть что-то придумать с формулами, но видимо без vba тут не обойтись( Есть несколько листов. Все данные на них в одном...

Макрос заполнение пустых ячеек
Здравствуйте уважаемые форумчане! Необходим макрос,описание в файле пример.

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

Новые блоги и статьи
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определенном условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru