[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Цикл в цикле
Lobanov_kirill_
Друзья, подскажите что тут не так!? Есть примитивный форум (это практическая) который нужно заполнить темами и ответами, причем тем должно быть 160000, а ответов 600000. Вот что у меня получилось

$num = 510;
for ($j=1;$j < 10;$j++){
$mess = "Это сообшение сгенерировано циклом for";

$cat = $num + $j;
for($i=1; $i < 51; $i++)
{

$result = mysql_query("INSERT INTO comments(mess,date,time,cat) VALUE ('$mess','$all','$time','$cat') ",$db);
}

}

$cat -- это номер категории темы (по этому номеру осуществляется привязка ответа)
$mess -- ответ
$date и $time -- время
Как я понимаю скрипт должен сообщение $mess прописать 50 раз в тему с категорией 511, потом к категории прибавляется 1 и опять прописывается 50 сообщений уже в категорию 512 и т.д. покуда категория не станет 520. Но что получается у меня!!!!! 50 сообщений прописывается в категорию 520. Вопрос: почему?



Спустя 42 минуты, 19 секунд (16.09.2012 - 10:36) Placido написал(а):
А как может что-то записаться в категорию 520, если в цикле ($j=1;$j < 10;$j++) j может быть равной не более 9? Соответственно, последняя категория, куда будет что-то писаться ($cat = $num + $j;) 510+9 = 519.

И зачем делать 500 с лишним запросов в базу, если можно сначала сформировать ('$mess','$all','$time','$cat') нужное количество раз, а потом отправить это все в базу одним запросом вида
mysql_query("INSERT INTO comments
(mess,date,time,cat)
VALUES
('
$mess[0]','$all[0]','$time[0]','$cat[0]'),
('
$mess[1]','$all[1]','$time[1]','$cat[1]'),
('
$mess[2]','$all[2]','$time[2]','$cat[2]'),
...
"
);

Спустя 6 минут, 40 секунд (16.09.2012 - 10:43) Lobanov_kirill_ написал(а):
По поводу цифры 520 ошибочка, не правильно перенес в форум, там в условии цикла стоит цифра 11, и получается 520. Если я Вас правильно понял, Вы мне предлагаете написать один большой запрос и обратится к БД? Но у меня должно быть 150 000 тем и 600 000 ответов!? Я думал что в цикле это будет немного быстрее. Скорее всего я Вас не правильно понял, не могли бы Вы подробней описать?

Спустя 1 час, 52 минуты, 33 секунды (16.09.2012 - 12:35) Placido написал(а):
$num = 500;
$mess = "Это сообшение сгенерировано циклом for";
for ($j = 1; $j <= 10; $j++) {
$cat = $num + $j;
for ($i = 1; $i <= 50; $i++) {
$values[] = "('$mess','$all','$time','$cat')";
}
}

$sql = "INSERT INTO `comments` (`mess`, `date`, `time`, `cat`) VALUES " . implode(', ', $values);
mysql_connect('yourhost', 'youruser', 'yourpass');
mysql_select_db('yourdb');
mysql_query($sql) or die(mysql_error());

Такой запрос лучше, чем 500 отдельных запросов. Правда, очень большой запрос (на десятки тысяч строк), скорее всего, не сможет обработать сервер MySQL. Тогда либо разбивать его на несколько запросов, либо воспользоваться "LOAD DATA INFILE ...", либо создать дамп и экспортировать его через командную строку или специальную программу.

Спустя 18 часов, 53 минуты, 16 секунд (17.09.2012 - 07:28) Lobanov_kirill_ написал(а):
Спасибо, подключил к БД работает!
Быстрый ответ:

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