[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: 1 запрос вместо 100
wollk
Добрый день. Подскажите пожалуйста, как осуществить вставку в таблицу 100 записей в одном запросе (в каждой записи разные параметры)
Просто через WHILE - это будет 100 запросов blink.gif



Спустя 7 минут, 29 секунд (18.12.2010 - 15:19) wollk написал(а):
Хм.... Придумал один способ... но в 200 даже больше строк)))) // Ладно жду советов

Спустя 4 минуты, 24 секунды (18.12.2010 - 15:23) inpost написал(а):
INSERT INTO `table` (`id`,`name`) VALUES (1,'aa'),(2,'bb'),(3,'cc')

Значения в скобках (после валуес), между ними запятая. Все запросы в один массив, потом его объеденяешь и запускаешь одно обращение.

Спустя 14 минут, 5 секунд (18.12.2010 - 15:37) Guest написал(а):
Ну я так и подумал (второе сообщение).. но 100 скобок писать... .!!! Должен быть дрeuqj выход

Спустя 3 минуты, 22 секунды (18.12.2010 - 15:40) Guest написал(а):
Хотя..... Ну ладно.. так и поступлю если не будет более лёгких предложений

Спустя 7 минут, 37 секунд (18.12.2010 - 15:48) inpost написал(а):
Кому это 100 скобок писать? Прописываешь в implode один раз, и нет проблем =)

Спустя 1 минута, 55 секунд (18.12.2010 - 15:50) sergeiss написал(а):
Guest - а в чем проблема создать такой запрос? Делаешь сначала, в цикле (тот же while, например)), нужный запрос на вставку любого количества данных, потом запускаешь.

Спустя 20 минут, 13 секунд (18.12.2010 - 16:10) Guest написал(а):
Можно примеры (2 предыдущих сообщений не понял) Черз вайл пытался не получилось. Или я не так делал

Спустя 11 минут, 17 секунд (18.12.2010 - 16:21) sergeiss написал(а):
Цитата (Guest @ 18.12.2010 - 17:10)
Черз вайл пытался не получилось. Или я не так делал

А ты покажи, как делал-то smile.gif Может быть, только немного ошибся, в какой-нибудь мелочи.

Спустя 14 секунд (18.12.2010 - 16:22) inpost написал(а):
показывай скрипт

Спустя 16 минут, 3 секунды (18.12.2010 - 16:38) Guest написал(а):
Я его удалил.. нол было как то так

INSERT INTO `table` (`id`,`name`) VALUES И ТУТА ВАЙЛ (1,'aa'),(2,'bb'),(3,'cc')

Спустя 16 секунд (18.12.2010 - 16:38) Guest написал(а):
Лучше напишите как правильно

Спустя 35 минут, 36 секунд (18.12.2010 - 17:14) hellmin написал(а):
while(условие)
массив[] = "(данные1, 'данные2')";


INSERT INTO `table` (`id`,`name`) VALUES implode(',', массив)

Спустя 41 минута, 21 секунда (18.12.2010 - 17:55) sergeiss написал(а):
Guest - лучше ты напиши, как делал... Полностью покажи.

Цитата (hellmin @ 18.12.2010 - 18:14)
INSERT INTO `table` (`id`,`name`) VALUES implode(',', массив)

идея верная, но написано принципиально не верно! Потому что выглядит, будто бы в SQL всё делается. А это не так.

Спустя 3 минуты, 2 секунды (18.12.2010 - 17:58) Guest написал(а):
Я удалил, сейчас посатавил типа так

while($i<100){

вставить таблицу
}

но это 100 запросов!!!

Спустя 4 минуты, 4 секунды (18.12.2010 - 18:02) hellmin написал(а):
Цитата (sergeiss @ 18.12.2010 - 14:55)
Guest - лучше ты напиши, как делал... Полностью покажи.

Цитата (hellmin @ 18.12.2010 - 18:14)
INSERT INTO `table` (`id`,`name`) VALUES implode(',', массив)

идея верная, но написано принципиально не верно! Потому что выглядит, будто бы в SQL всё делается. А это не так.

Ну конечно написано не верно)) Я просто показал что и куда ставить

Спустя 2 минуты, 13 секунд (18.12.2010 - 18:04) wollk написал(а):
попробую вспомнить как я делал... Я даже не тестил так как знал что это не правильно

mysql_query("INSERT INTO `table` (`id`,`name`) VALUES".while($i<100){
$name=mt_rand(1,999);
('$id', '$name')."
");

Это я дописал.. а так я закончил писать до первой точки (".while...) - Мне даже смешной вариант как я написал.... Я уже думал как сделать через массив но не придумал. Но раз сказали что не работает, то тестить лишний раз не буду

Спустя 1 минута, 10 секунд (18.12.2010 - 18:05) Guest написал(а):
Цитата (hellmin @ 18.12.2010 - 15:02)
Цитата (sergeiss @ 18.12.2010 - 14:55)
Guest - лучше ты напиши, как делал... Полностью покажи.

Цитата (hellmin @ 18.12.2010 - 18:14)
INSERT INTO `table` (`id`,`name`) VALUES implode(',', массив)

идея верная, но написано принципиально не верно! Потому что выглядит, будто бы в SQL всё делается. А это не так.

Ну конечно написано не верно)) Я просто показал что и куда ставить

Мне нужен 1 запрос место 100.. и чтобы не писать вручную ()... я могу изменить в любой момент кол-во 'вставок'

Спустя 8 минут, 49 секунд (18.12.2010 - 18:14) sixpoundeeer написал(а):
А так?
$separated = implode(',', массив);
$query = "INSERT INTO `table` (`id`,`name`) VALUES ". $separated;

Только в массив, получается, придется вносить данные, обрамленные одинарными кавычками и скобками по принципу ('aa'),('bb'),('cc').

Спустя 54 минуты, 58 секунд (18.12.2010 - 19:09) Guest написал(а):
Как тогда массив сделать
while($i<100){
$i++;
$array[$i]=array('2','admin');
}

$separated = implode(',', $array);
$query = "INSERT INTO `table` (`id`,`name`) VALUES ". $separated;



Так чтоли ?

Спустя 2 минуты, 43 секунды (18.12.2010 - 19:12) sixpoundeeer написал(а):
Цитата (wollk @ 18.12.2010 - 15:04)
попробую вспомнить как я делал... Я даже не тестил так как знал что это не правильно

mysql_query("INSERT INTO `table` (`id`,`name`) VALUES".while($i<100){
$name=mt_rand(1,999);
('$id', '$name')."
");

Это я дописал.. а так я закончил писать до первой точки (".while...) - Мне даже смешной вариант как я написал.... Я уже думал как сделать через массив но не придумал. Но раз сказали что не работает, то тестить лишний раз не буду

for($i = 1; $i <= 100; $i++)
{
$array[] = "('". mt_rand(1, 999) ."')";
}

$separated = implode(',', $array);

$query = "INSERT INTO `table` (`rnd`) VALUES ". $separated;

mysql_query($query);

Вставит 100 случайных чисел от 1 до 999 в поле `rnd` таблицы `table`.
Как вставить несколько полей, додумывайтесь сами :)

Спустя 1 час, 3 минуты, 1 секунда (18.12.2010 - 20:15) Guest написал(а):
LF как вставить 100 случайных чисел я знаю....а вот как несколько полей в одном запросе..((

Спустя 30 минут, 52 секунды (18.12.2010 - 20:46) sergeiss написал(а):
Guest - вот сюда сходи: http://phpforum.su/index.php?showtopic=21916.
Но если и после этого не поймешь, то тогда лучше оставь программирование. Займи чем-нибудь другим.

Спустя 14 минут (18.12.2010 - 21:00) sixpoundeeer написал(а):
Цитата (Guest @ 18.12.2010 - 17:15)
LF как вставить 100 случайных чисел я знаю....а вот как несколько полей в одном запросе..((

for($i = 1; $i < 100; $i++)
{
$array[] = "('". $i ."', '". mt_rand(1, 999) ."')";
}

$separated = implode(',', $array);

$query = "INSERT INTO `table` (`id`, `name`) VALUES ". $separated;

mysql_query($query);

То есть, элементы массива у нас выглядят примерно так: ('1', '330'),('2', '536'),('3', '460')...
Когда массив обрабатывается функцией implode, это все превращается в одну длинную строку и в таком виде подается в запрос.
А вообще, если речь идет конкретно о id, то не вижу смысла заполнять его с помощью запроса. Есть же AUTO_INCREMENT.

Спустя 2 часа, 55 минут, 57 секунд (18.12.2010 - 23:56) Guest написал(а):
Спасибо попробую... П.С. Мне не ID нужно делать...



Круто!!!!! Работает!!! СПАСИБО!!!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.