Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: insert в цикле select

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Грачи прилетели
Отправлено: 29 Августа, 2017 - 16:48:41
Post Id



Гость


Покинул форум
Сообщений всего: 81
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Добрый день!

что-то в ступоре, помогите, пожалуйста, вставить в цикле полученный в результате селекта массив. при таком инсерте вставляет только одну запись..., а имз базы выводится несколько записей в цикле
PHP:
скопировать код в буфер обмена
  1.  
  2. if ($result = $mysqli->query("SELECT count(id) con, spec FROM `fk`")) {
  3. while( $Arr = $result->fetch_assoc() ){
  4.  
  5. mysqli_query($mysqli, "INSERT INTO `fk_stat` (`id`, `day_stat`, `spec`, `str`) VALUES (NULL, NOW(), '".$Arr['spec']."', '".$Arr['con']."');");
  6.  
  7.         }
  8. }
  9.  
  10.  
 
 Top
rgl
Отправлено: 29 Августа, 2017 - 18:00:16
Post Id



Новичок


Покинул форум
Сообщений всего: 56
Дата рег-ции: Авг. 2017  
Откуда: замкадье


Помог: 1 раз(а)




Если в селекте есть count и нет group by, то кажется возвращается всегда одна запись?
А вообще такие непонятки отлаживать - вместо (или дополнительно к) запросу сам запрос распечатывать. Типа так:
PHP:
скопировать код в буфер обмена
  1. echo "сейчас будет запрос: " . "SELECT count(id) con, spec FROM `fk`" . "<br>\n";
  2. if ($result = $mysqli->query("SELECT count(id) con, spec FROM `fk`")) {
  3. while( $Arr = $result->fetch_assoc() ){
  4.  
  5. echo "а сейчас будет: " . "INSERT INTO `fk_stat` (`id`, `day_stat`, `spec`, `str`) VALUES (NULL, NOW(), '".$Arr['spec']."', '".$Arr['con']."');" . "<br>\n";
  6. mysqli_query($mysqli, "INSERT INTO `fk_stat` (`id`, `day_stat`, `spec`, `str`) VALUES (NULL, NOW(), '".$Arr['spec']."', '".$Arr['con']."');");
  7.          }
  8. }
  9.  
 
 Top
Мелкий Супермодератор
Отправлено: 29 Августа, 2017 - 18:05:27
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Одного запроса более чем достаточно.
CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO `fk_stat` (`id`, `day_stat`, `spec`, `str`)
  2. SELECT NULL, now(), spec, count(id) FROM `fk`


И соглашусь, скорей всего вы собирались сделать группировку
CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO `fk_stat` (`id`, `day_stat`, `spec`, `str`)
  2. SELECT NULL, now(), spec, count(id) FROM `fk` GROUP BY spec


И не надо вставлять null очевидно подразумевая дефолтное значение. Если необходимо дефолтное значение - не указывайте такое поле в insert
CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO `fk_stat` (`day_stat`, `spec`, `str`)
  2. SELECT now(), spec, count(id) FROM `fk` GROUP BY spec

(Добавление)
rgl пишет:
Если в селекте есть count и нет group by, то кажется возвращается всегда одна запись?

Для указанного автором запроса или одна строка с каким-то непонятным spec или сообщение об ошибке, в зависимости от настроек sql_mode.


-----
PostgreSQL DBA
 
 Top
rgl
Отправлено: 29 Августа, 2017 - 18:41:37
Post Id



Новичок


Покинул форум
Сообщений всего: 56
Дата рег-ции: Авг. 2017  
Откуда: замкадье


Помог: 1 раз(а)




Мелкий пишет:
И не надо вставлять null очевидно подразумевая дефолтное значение. Если необходимо дефолтное значение - не указывайте такое поле в insert

Кажется, если указать null, то вставляется именно null а не умолчательное значение (ну за исключением автоинкрементного поля)?
З.Ы.
Да, сейчас проверил, именно так:
CODE (text):
скопировать код в буфер обмена
  1. sqlite> create table testtable (fld1 integer, fld2 integer default 123);
  2. sqlite> insert into testtable values (15,null);
  3. sqlite> insert into testtable (fld1) values(16);
  4. sqlite> select * from testtable;
  5. 15|
  6. 16|123
  7.  

(Отредактировано автором: 29 Августа, 2017 - 18:45:00)

 
 Top
Грачи прилетели
Отправлено: 29 Августа, 2017 - 19:09:27
Post Id



Гость


Покинул форум
Сообщений всего: 81
Дата рег-ции: Май 2015  


Помог: 0 раз(а)




Друзья, спасибо!

конечно же забыл GRUOP BY ... причем , когда sql запрос проверял группировку делал, а потом просто забыл, а так как к php обращаюсь раз в полгода, когда свои отчетитки правлю, просто недоглядел.
 
 Top
Мелкий Супермодератор
Отправлено: 29 Августа, 2017 - 19:51:10
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




rgl пишет:
Кажется, если указать null, то вставляется именно null а не умолчательное значение (ну за исключением автоинкрементного поля)?

телепатия показывает, что поле с именем id - именно primary key с автоинкрементом
Нормальные базы на попытку вставить null в not null поле вообще-то говорят "вы хотите странного, мы так делать не будем". А mysql вставит следующее значение автоинкремента. такие вот фокусы


-----
PostgreSQL DBA
 
 Top
rgl
Отправлено: 01 Сентября, 2017 - 11:42:32
Post Id



Новичок


Покинул форум
Сообщений всего: 56
Дата рег-ции: Авг. 2017  
Откуда: замкадье


Помог: 1 раз(а)




Мелкий пишет:
Нормальные базы на попытку вставить null в not null поле вообще-то говорят "вы хотите странного, мы так делать не будем". А mysql вставит следующее значение автоинкремента.

SQLite тоже вставляет следующее значение:
CODE (text):
скопировать код в буфер обмена
  1. sqlite> create table testtable (fld1 integer primary key autoincrement, fld2 text);
  2. sqlite> insert into testtable values (null, 'A'), (null,'B'), (null,'C');
  3. sqlite> select * from testtable;
  4. 1|A
  5. 2|B
  6. 3|C
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB