|
|
|
| Всем привет!
Народ, помогите решить задачу?
Достался древний сайт на переделку, одна из задач:
- добавление прайса (иксель) в DB
Структура прайса – 5 колонок примерно до 5000 наименований!
Не получается добавить «ПОСТРОЧНО!» т.е. первая колонка - у меня вливается «блоком», что не приемлемо!!! РЕЗУЛЬТАТ: 1БЛОК – 1ID (сортировка) : )))
Поэтому, колонка прайса состоит из, скажем 1000 строк – и имеет всего – 1 id !!! :- )А надо соответственно 1000 ……..и так упаковать все 5 колонок…
В цикле перебрать не получилось.
Есть какие нибудь предложения, сей реализации?
Спасибо! | |
|
|
|
|
|
|
|
для: Denandi
(08.01.2009 в 08:38)
| | Хорошо, возможно не так где выразился?
Например: есть $_POST (значение) данные формы – одной строкой «100 100 100 100 100…» около 5000!!!;
Как универсально записать «100 100 100 100 100…» в базу данных, разложив (один insert = один «100» )????
|
| |
|
|
|
|
|
|
|
для: Denandi
(08.01.2009 в 15:01)
| | каким символом разбиты значения? | |
|
|
|
|
|
|
|
для: Denandi
(08.01.2009 в 15:01)
| | Чтобы импортировать ы sql, сначала лучше перенвертировать xls в csv-формат.
Вы можете прикрепить кусок прайса в аттаче? | |
|
|
|
|
 21 Кб |
|
|
для: ols
(08.01.2009 в 15:07)
| | Суть: я с начала создал форму куда для простоты ввводил скопированные столбцы файла и отправлял...
теперь, мне кажется надо делать сохранение в txt с табуляцией - разделителями и загружать и рубить файл.. вообщем нихрена не получается, больше запутался!
|
буду признателен за помощь.
кусок файла прикрепил... | |
|
|
|
|
|
|
|
для: Denandi
(08.01.2009 в 15:28)
| | Данный xls-файл через MS Exel переконверитруйте в csv-формат (разделитель точка с запятой) в итоге например file.csv
Затем воспользуйтесь данным скриптом
<?php
set_time_limit(1000);
//конектимся к БД
include "config.php";
$handle = fopen("file.csv", "r");
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)
{
$sql = "INSERT INTO table VALUES ($data[0]','$data[1]','$data[2]','$data[3]')";
$qw = mysql_query($sql);
if($qw)
{
echo 'Импортировано:'.$sql.'<br />';
}
else echo mysql_error();
}
fclose($handle);
?>
|
при условии что sql-таблица у вас имеет 4 поля | |
|
|
|
|
|
|
|
для: ols
(08.01.2009 в 15:40)
| | текстовые данные перед обрамлением кавычками следует экранировать.
Числовые данные - приводить к формату с десятичной точкой.
Рано Вам еще решать такие задачи. | |
|
|
|
|
|
|
|
для: Trianon
(08.01.2009 в 15:43)
| | >текстовые данные перед обрамлением кавычками следует экранировать.
Где имеено? Почему в апострофах нельзя?
>Числовые данные - приводить к формату с десятичной точкой.
>
>Рано Вам еще решать такие задачи.
В чем моя ошибка-то? :) | |
|
|
|
|
|
|
|
для: ols
(08.01.2009 в 15:48)
| | Обидно будет, если в тексте точка с запятой встретится... | |
|
|
|
|
|
|
|
для: Николай2357
(08.01.2009 в 15:56)
| | Точка с запятой как раз спокойно пройдет как надо. | |
|
|
|
|
|
|
|
для: ols
(08.01.2009 в 15:48)
| | >>текстовые данные перед обрамлением кавычками следует экранировать.
>Где имеено? Почему в апострофах нельзя?
В данном случае неважно, кавычками или апострофами Вы обрамляете текст.
экранирование необходимо, иначе апостроф, обратный слеш (а возможно и еще несколько спецсимволов) приведут к синтаксической ошибке в запросе (в лучшем чслучае) или к SQL-инъекции ( в худшем)
>>Числовые данные - приводить к формату с десятичной точкой.
Посмотрите на третий столбик файле и в БД. Увидите.
>>Рано Вам еще решать такие задачи.
>В чем моя ошибка-то? :)
$sql = "INSERT INTO table VALUES ($data[0]','$data[1]','$data[2]','$data[3]')";
В том, что предложили готовый скрипт | |
|
|
|
|
 685 байт |
|
|
для: Trianon
(08.01.2009 в 16:00)
| | >Посмотрите на третий столбик файле и в БД. Увидите.
Я забыл в запросе апостров в $data[1] поставить
$sql = "INSERT INTO `table`
VALUES (
'$data[0]', '$data[1]', '$data[2]', '$data[3]'
)";
|
А в целом скрипт нормально импортировал данные - я им постоянно пользуюсь для импортирования объмных данных.
Я в аттаче прикрепил файл table.sql - результат работы скрипта. Все там правильно | |
|
|
|
|
|
|
|
для: ols
(08.01.2009 в 16:42)
| | Еще бы он не импортировал в tinytext и без единого спецсимвола в данных..
постоянно пользоваться Вы можете чем угодно.
Не надо только предлагать это другим в качестве универсального решения. | |
|
|
|
|
|
|
|
для: Trianon
(08.01.2009 в 17:10)
| | >Еще бы он не импортировал в tinytext и без единого спецсимвола в данных..
>постоянно пользоваться Вы можете чем угодно.
Я не зря сачала попросил структура прайса, где Вы там спецсимволы видите. Да может возникнуть проблема, если 3 столбец имеет тип поля например decimal.
Структуру таблицы человек не предоставил. | |
|
|
|
|
|
|
|
для: ols
(08.01.2009 в 18:15)
| | в структуре их и не будет.
А вот в данных им оказаться не помешает ничего. | |
|
|
|
|
|
|
|
для: Trianon
(08.01.2009 в 18:33)
| | >в структуре их и не будет.
>А вот в данных им оказаться не помешает ничего.
у я опять не понимаю что Вы имеете ввиду. Импортируем-то из прайса | |
|
|
|
|
|
|
|
для: ols
(08.01.2009 в 18:42)
| | имеемое в виду изложено (08.01.2009 в 15:43) | |
|
|
|
|
|
|
|
для: Trianon
(08.01.2009 в 15:43)
| | >Числовые данные - приводить к формату с десятичной точкой.
Все грузит, но цены округляет.. как правильно вырулить?
в таблице поле ставил- float по идее должно работать!
может предварительно обработать? floatval -не спасает
раньше просто float в базу ставил и все работало ..а сча нет.. | |
|
|
|
|
|
|
|
для: Denandi
(08.01.2009 в 22:20)
| | >Все грузит, но цены округляет.. как правильно вырулить?
>в таблице поле ставил- float по идее должно работать!
>может предварительно обработать?
Ага. Дустом. | |
|
|
|
|
|
|
|
для: Trianon
(08.01.2009 в 22:28)
| | >Ага. Дустом.
??? поясни. | |
|
|
|
|
|
|
|
для: Denandi
(08.01.2009 в 23:08)
| | посмотрите текст SQL-запроса, который создается этим скриптом - всё станет ясно.
Когда я читаю вот такое "может предварительно обработать?", то совершенно уверен, что человеку наплевать как у него работает скрипт, или почему он не работает. Он не хочет вникать в детали.
Пояснять в ответ, конечно, можно... но в такой ситуации - зачем? | |
|
|
|
|
|
|
|
для: Trianon
(08.01.2009 в 23:18)
| | Ввожу прайс в базу данных, колонка с ценой не отображается корректно:
для примера, часть колонки цен прайса
3 109,22
873,66
1 432,55
1 117,78
2 410,61
2 025,97
166,99
166,99
171,92
|
при проверки, не выводит тысячные...
например вместо 1 117,78 вставляет в DB = 1
Как сделать что бы DB приняла - "тысячные" в полном объеме? по шарил в функциях, ничего стоящего к сожалению не нашел | |
|
|
|
|
|
|
|
для: Denandi
(09.01.2009 в 10:00)
| | Вы не видите пробела после единицы?
Не видите запятой вместо точки?
Функция php - str_replace()
Функция MySQL - REPLACE()
Использовать можете любую. | |
|
|
|
|
|
|
|
для: Trianon
(09.01.2009 в 12:21)
| | >Вы не видите пробела после единицы?
+++++++++++++++++++++++++++++++++++++++++++++
Trianon - дружище!!! в упор НЕ В И Д Е Л пробел (точнее не мог представить себе его наличие!!! :-) )
Иксель то лепит по денежному формату... :))))
про урезания: все "зарезал" пробел стал роковым - невнимательность...
всех благодарю за помощь! | |
|
|
|
|
|
|
|
для: Denandi
(08.01.2009 в 22:20)
| | Понятное дело будет округлять. Обратите внимание на запятую в цене. Ее нужно заменить на точку
<?php
set_time_limit(1000);
//конектимся к БД
include "config.php";
$handle = fopen("file.csv", "r");
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)
{
$dt = $data[2];
$dt = str_replace(",",".",$dt);
$sql = "INSERT INTO `table`
VALUES (null,
'$data[0]', '$data[1]', '$dt', '$data[3]'
)";
$qw = mysql_query($sql);
if($qw)
{
echo 'Импортировано:'.$sql.'<br />';
}
else echo mysql_error()."<br />";
}
fclose($handle);
?>
|
Используйте тип данных DECIMAL для хранения цен. | |
|
|
|
|
|
|
|
для: Denandi
(08.01.2009 в 15:28)
| | То есть Вы еще не определились с тем, как отправлять данные на сервер.
Через .csv будет проще импортировать. Соответствующая функция в php - fgetcsv()
Не выделяйте, пожалуйста, текст как код - сообщение разъезжается так, что его приходится прокручивать по горизонтали скроллбаром. | |
|
|
|
|
|
|
|
для: Trianon
(08.01.2009 в 15:41)
| | Всем, огромное спасибо!
позже сяду опробую..
____________________________
>Не выделяйте, пожалуйста, текст как код - сообщение разъезжается так, что его приходится прокручивать по горизонтали скроллбаром.
:-) НЕ ЗНАЛ, БОЛЬШЕ НЕ БУДУ!!! | |
|
|
|
|
|
|
|
для: Trianon
(08.01.2009 в 15:41)
| | - | |
|
|
|
|
|
|
|
для: ols
(08.01.2009 в 23:20)
| | Я?! Смеетесь? :))
У меня таких возможностей нету. Да, откровенно говоря, и желания. | |
|
|
|