Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/34: Рейтинг темы: голосов - 34, средняя оценка - 4.85
1 / 1 / 0
Регистрация: 18.12.2011
Сообщений: 13

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

27.02.2012, 11:33. Показов 6608. Ответов 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
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru