|
|
|
|
|
для: cheops
(01.09.2005 в 13:03)
| | Мне казалось, что так проще, чем делать импортирование CSV. Хотя может быть придется-таки заняться именно импортированием. Будем посмотреть.
Спасибо. | |
|
|
|
|
|
|
|
для: 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 | |
|
|
|
|
|
|
|
для: 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. Наверное можно сделать его более изящно, но не хватает знаний и опыта.
Да, и еще: я пробовал считать количество обработанных строк каждым приведенным циклом, оказалось, что каждый цикл крутится до тех пор, пока предыдущий не завершит свою работу - не закончит отправлять в базу значения. Но так как количество обрабатываемых значений одинаково, то на результате это отрицательно не сказывается. Ну вот, наверное снова не понятно выразился... :( | |
|
|
|
|
|
|
|
для: ElWhite
(31.08.2005 в 18:02)
| | Чего-то не очень понятно... может вы приведёте примерчик того, что есть и что должно получится в конце? | |
|
|
|
|
|
|
| Или другими словами как сделать так, чтобы, например 300 строк данных столбца с названием column_2 вставились следующим запросом рядом с 300 строками столбца column_1 которые были вставлены ранее другим запросом, а не ниже, начиная с 301 строки?
Может есть выход? Подскажите, пожалуйста.
Написал скрипт добавления в базу данных прайса сразу колонками (одна колонка - один массив), но не учел, что колонки то ставятся друг под другом, если их заливать в MySQL поочереди, запрос за запросом, а не рядом строка в строку.
Извините, если написал слишком путанно. | |
|
|
|
|