powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Прайс в формате CSV в базу MySQL
25 сообщений из 45, страница 1 из 2
Прайс в формате CSV в базу MySQL
    #38415396
Здравствуйте форумчане!)

Мне нужно перенести прайс из файла в формате CSV в базу MySQL без использовании php функции fgetcsv.

Подскажите как поступить?
...
Рейтинг: 0 / 0
Прайс в формате CSV в базу MySQL
    #38415432
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
load data infile
...
Рейтинг: 0 / 0
Прайс в формате CSV в базу MySQL
    #38415435
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например, так
...
Рейтинг: 0 / 0
Прайс в формате CSV в базу MySQL
    #38415476
а как сделать чтобы дерево построило.. по сути nested tree???
...
Рейтинг: 0 / 0
Прайс в формате CSV в базу MySQL
    #38415489
Дерево определяется с уровнем вложенности..
Формат CSV файла обычный:
[qoute]
Код;НазваниеКаталога;;
Код;НазваниеКаталога;;
Код;НазваниеТовара;Цена;Тип(шт,кг)
Код;НазваниеКаталога;;
Код;НазваниеТовара;Цена;Тип(шт,кг)
Код;НазваниеКаталога;;
Код;НазваниеТовара;Цена;Тип(шт,кг)
[/qoute]
Как из него дерево построить??
...
Рейтинг: 0 / 0
Прайс в формате CSV в базу MySQL
    #38415503
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Либо переделать этот файл, разбив на два и добавив к товарам ссылки на категории. Либо читать построчно и в зависимости от неизвестно чего (наличие/отсутствие цены и типа?) записывать данные в ту или иную таблицу.
Барабанова Эльвирабез использовании php функции fgetcsvНу дык есть множество способов читать файл :-)
...
Рейтинг: 0 / 0
Прайс в формате CSV в базу MySQL
    #38415510
vkle,

Да так и хочется сделать построчно считывать...
Категории различаются отсутствием Цен и Типов...

В то же время хочется сделать контроль по коду...
...
Рейтинг: 0 / 0
Прайс в формате CSV в базу MySQL
    #38415511
Только не хочется чтобы дерево наезжала на другое дерево)
...
Рейтинг: 0 / 0
Прайс в формате CSV в базу MySQL
    #38415546
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мухи - отдельно, котлеты - отдельно. В смысле, каждую сущность хранить в отдельной таблице. Что касается дерева, так не видать даже намеков. Показана линейная последовательность без ссылки на родителя.
...
Рейтинг: 0 / 0
Прайс в формате CSV в базу MySQL
    #38415553
Получается что в первое время нужно вручную забивать?

Только при изменении изменять старые записи в базе?
...
Рейтинг: 0 / 0
Прайс в формате CSV в базу MySQL
    #38415557
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сейчас то каким образом по этим данным дерево можно построить? Не в коде, а просто карандашом на бумаге.
...
Рейтинг: 0 / 0
Прайс в формате CSV в базу MySQL
    #38415713
1ур. Каталог
\- 2ур Каталог
\- 3ур Каталог
\- Товар
\- 3ур Каталог
\- Товар
...
Рейтинг: 0 / 0
Прайс в формате CSV в базу MySQL
    #38415744
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Барабанова Эльвира1ур. Каталог
\- 2ур Каталог
\- 3ур КаталогА как Вы определили что это 3 уровень каталога, а не второй? Вот на мой взгляд, это второй уровень. А предыдущий второй уровень просто не содержит товаров (пустой).
...
Рейтинг: 0 / 0
Прайс в формате CSV в базу MySQL
    #38415836
Именно так и нужно..
Прайс0235;1урКаталог;;
5023;2урКаталог;;
9142;3урКаталог;;
4912;3урТовар;32руб;шт
2918;3урКаталог;;
2832;3урТовар;38руб;шт
...
Рейтинг: 0 / 0
Прайс в формате CSV в базу MySQL
    #38415844
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Барабанова ЭльвираИменно так и нужно..Другими словами, "я это просто знаю". Вот если б удалось составить алгоритм соотнесения детей и родителей - тады можно было бы автоматизировать заливку.
...
Рейтинг: 0 / 0
Прайс в формате CSV в базу MySQL
    #38415864
Алгоритм надеюсь очень простой?
...
Рейтинг: 0 / 0
Прайс в формате CSV в базу MySQL
    #38415870
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это уж Вам виднее. Нарисуйте на бумаге, формализуйте принципы соотнесения одного с другим. Когда "вручную" это будет работать без ошибок, тогда уже можно говорить о простоте или сложности.
...
Рейтинг: 0 / 0
Прайс в формате CSV в базу MySQL
    #38415893
Код для разбора строк:
Код: php
1.
2.
3.
4.
5.
6.
7.
$values=array();
$fp=fopen("prices.csv","r");
while(!feof($fp)) {
  $str=fgets($fp,512);
  $values[]=explode(";",$str);
}
fclose($fp);


А в базу как с учетом уровней?
...
Рейтинг: 0 / 0
Прайс в формате CSV в базу MySQL
    #38415904
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
$values=array();
$fp=fopen("prices.csv","r");
while(!feof($fp)) {
  $str=fgets($fp,512);
  $fields=explode(";",$str);
  if($fields[2]=="" && $fields[3]=="") {
    $fields["categorytype"]=1;
  } else {
    $fields["categorytype"]=0;
  }
  $values[]=$fields;
}
fclose($fp);


Кажется так лучше немного?
...
Рейтинг: 0 / 0
Прайс в формате CSV в базу MySQL
    #38415913
Или так сделать? тут немного легче по учету кода сделать?
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
$values=array();
$fp=fopen("prices.csv","r");
while(!feof($fp)) {
  $str=fgets($fp,512);
  $fields=explode(";",$str);
  if($fields[2]=="" && $fields[3]=="") {
    $fields["categorytype"]=1;
  } else {
    $fields["categorytype"]=0;
  }
  $values[$fields[0]]=$fields;
}
fclose($fp);
...
Рейтинг: 0 / 0
Прайс в формате CSV в базу MySQL
    #38415969
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну как... Если правильно понимаю, поле "Код" - как раз и есть уникальный идентификатор каталога или товара. Попался новый каталог - инсертите его в таблицу каталога, указав еще и идентификатор родительского. Попался товар - инсертите его в таблицу товаров, но со ссылкой на идентификатор каталога. В первом приближении так.

Если далее оптимизировать код, то можно сократить число запросов до двух (на не слишком больших объемах данных). Сначала собираете запрос на инсерт сразу всех элементов, а потом разом заносите данные в таблицу. Если запрос получается слишком большим (впираемся в ограничение памяти или ограничение sql-сервера), то инсертить порциями.

По коду замечание. Вы указали fgets($fp,512) что читать нужно не более 511 байт. Тут нужно быть уверенным что строк бОльшей длины в файле не существует или вообще не указывать длину читаемого фрагмента. В остальной код не вникал, ибо камментов там все равно нет, а алгоритм определения уровней каталога я так и не понял.
...
Рейтинг: 0 / 0
Прайс в формате CSV в базу MySQL
    #38417159
vkle,


vkleа алгоритм определения уровней каталога я так и не понял.
алгоритм определения уровней каталога
Код: php
1.
2.
3.
4.
5.
if($fields[2]=="" && $fields[3]=="") {
    $fields["categorytype"]=1;
  } else {
    $fields["categorytype"]=0;
  }
...
Рейтинг: 0 / 0
Прайс в формате CSV в базу MySQL
    #38417176
Читабельный код:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
// Масив для результата
$values=array();
// Открываем файл на чтение
$fp=fopen("prices.csv","r");
// Цикл чтения строк до конца файла
while(!feof($fp)) {
  // Заносим в переменую
  $str=fgets($fp);
  // Бьем строку на части по символу ";"
  $fields=explode(";",$str);
  // Определяем
  if($fields[2]=="" && $fields[3]=="") {
    // Тут каталог
    $fields["categorytype"]=1;
  } else {
    // Тут товар
    $fields["categorytype"]=0;
  }
  // Заносим в резултат
  $values[$fields[0]]=$fields;
}
fclose($fp);
...
Рейтинг: 0 / 0
Прайс в формате CSV в базу MySQL
    #38417203
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Барабанова Эльвираалгоритм определения уровней каталога
Код: php
1.
2.
3.
4.
5.
if($fields[2]=="" && $fields[3]=="") {
    $fields["categorytype"]=1;
  } else {
    $fields["categorytype"]=0;
  }

Это распознавание каталога и распознавание товара.

А как распознать вот это?
Барабанова Эльвира 1 ур. Каталог
\- 2 ур Каталог
\- 3 ур Каталог
\- Товар
\- 3 ур Каталог
\- ТоварПочему должны быть именно эти цифры, а не другие?
...
Рейтинг: 0 / 0
Прайс в формате CSV в базу MySQL
    #38417336
Вот и я этого тоже хочу понять)
Кто мне поможет с решение этой задачи.

Неужели ещё 1 переменную втыкать? до условия цикла и только потом в цикле перебирать? то есть инкрементировать при условии каталога?
...
Рейтинг: 0 / 0
25 сообщений из 45, страница 1 из 2
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Прайс в формате CSV в базу MySQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]