Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Как объединить отдельные запросы в общие строки?

Сообщения:  [1-5] 

 
 автор: ElWhite   (01.09.2005 в 13:36)   письмо автору
 
   для: cheops   (01.09.2005 в 13:03)
 

Мне казалось, что так проще, чем делать импортирование CSV. Хотя может быть придется-таки заняться именно импортированием. Будем посмотреть.
Спасибо.

   
 
 автор: cheops   (01.09.2005 в 13:03)   письмо автору
 
   для: ElWhite   (01.09.2005 в 09:21)
 

Хм... а нужно именно по колонкам добавлять, почему нельзя сохранить Excel-лист в виде тектового csv-файла - переправлять его на сервер - разбирать там и сразу создавать полноценную запись? Вот ссылке по теме, если они вас заинтересуют
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=5655
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=4843
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=3316

   
 
 автор: ElWhite   (01.09.2005 в 09:21)   письмо автору
 
   для: cheops   (31.08.2005 в 19:28)
 

Вроде бы я уже поборол проблему, но как-то криво:

Есть прайс в Exel-e с 15-ю колонками. Чтобы внести этот прайс в базу данных я сделал форму с 15-ю полями textarea. В каждое поле вставляю значения из одной колонки. Отправляю форму и скриптом загоняю значения каждого поля в массив:
<?
$veh 
split("\n"$vehicle);
?>
Потом каждый массив разворачиваю в цикле и заменяю значения строк на удобные для базы, после чего отображаю их для визуального контроля и вставляю в соответствующую колонку в суммирующую таблицу базы:

<? 
// первая колонка
while (list($key$value) = each($veh)){
      
// заменяем значения прайса на цифры
      // значения для ID столбцов сводной таблицы
      
$value=eregi_replace("тягачи""1"$value);
      
$value=eregi_replace("прицепы/полуприцепы""2"$value);
 
// ...............................................      
      
      
echo trim($value)." ";
      
      
// формирование запроса
      
$query "
      insert into tyres_summarytable set
      VehicID="
.trim($value)."";
      
      
// выполнение запроса
      
$result mysql_query($query);
      
      
// информирование о результате      
      
if ($result){
      
$success "<em>1-я колонка добавлена</em>";
      }
}    
// ----------------------------------------------
// вторая колонка
while (list($key$value) = each($trade)){
      
$value=eregi_replace("Bridgestone""1"$value);
      
$value=eregi_replace("Michelin""2"$value);
 
// ...............................................     
      
echo trim($value)." ";
      
      
// формирование запроса
      
$query "
      insert into tyres_summarytable set
      TrMarkID="
.trim($value)."";
      
      
// выполнение запроса
      
$result mysql_query($query);
      
      
// информирование о результате
      
if ($result){
      
$success "<em>2-я колонка добавлена</em>";
      }

?>
И так далее для всех колонок прайса. Получается такая ерунда, которая на самом деле не ерунда, а принцип работы MySQL, что для каждой новой вставки данных не зависимо от того, в какие колонки таблицы они добавляются AUTOINCREMENT создает новые строки с новыми значениями счетчика. В принципе это должно быть понятно, но я программирую первый раз и упустил из виду данный факт.
Но вчера догадался использовать для всех остальных циклов, кроме первого, не команду INSERT, а команду UPDATE, т.е. просто обновлять уже созданные строки.

Теперь это выглядит так:

<?    
// ----------------------------------------------
// вторая  и остальные колонки
// устанавливаю начальное значение счетчика обновляемых строк
$i=1
while (list($key$value) = each($trade)){
      
$value=eregi_replace("Bridgestone""1"$value);
      
$value=eregi_replace("Michelin""2"$value);
 
// ...............................................     
      
echo trim($value)." ";
      
      
// формирование запроса
      
$query "
      update tyres_summarytable set
      TrMarkID="
.trim($value).
      where SumTableID = "
.$i++."";
      
      
// выполнение запроса
      
$result mysql_query($query);
      
      
// информирование о результате
      
if ($result){
      
$success "<em>2-я колонка добавлена</em>";
      }

?>

Одна проблема вроде бы решена, но появилась другая: скрипт с таким счетчиком для указания обновляемых строк работает корректно только если данные вставляются в пустую таблицу и с обнуленным AUTOINCREMENT. Наверное можно сделать его более изящно, но не хватает знаний и опыта.

Да, и еще: я пробовал считать количество обработанных строк каждым приведенным циклом, оказалось, что каждый цикл крутится до тех пор, пока предыдущий не завершит свою работу - не закончит отправлять в базу значения. Но так как количество обрабатываемых значений одинаково, то на результате это отрицательно не сказывается. Ну вот, наверное снова не понятно выразился... :(

   
 
 автор: cheops   (31.08.2005 в 19:28)   письмо автору
 
   для: ElWhite   (31.08.2005 в 18:02)
 

Чего-то не очень понятно... может вы приведёте примерчик того, что есть и что должно получится в конце?

   
 
 автор: ElWhite   (31.08.2005 в 18:02)   письмо автору
 
 

Или другими словами как сделать так, чтобы, например 300 строк данных столбца с названием column_2 вставились следующим запросом рядом с 300 строками столбца column_1 которые были вставлены ранее другим запросом, а не ниже, начиная с 301 строки?

Может есть выход? Подскажите, пожалуйста.

Написал скрипт добавления в базу данных прайса сразу колонками (одна колонка - один массив), но не учел, что колонки то ставятся друг под другом, если их заливать в MySQL поочереди, запрос за запросом, а не рядом строка в строку.

Извините, если написал слишком путанно.

   

Сообщения:  [1-5] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования