|
|
|
| Здравствуйте.
Есть список марок автомобилей и различных моделей этих марок.
Т.е. так
FORD
Mondeo
Focus
OPEL
Astra
Corsa
Vectra
и т.д.
Причем список достаточно длинный.
Список в текстовом формате, отформатировать
и разбить его можно как угодно.
Нужно поместить его в базу данных.
Есть соответствующие таблицы:
manufacturers - для марок автомобилей
models - для списка моделей
manufacturers
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT ,
name TEXT NOT NULL ,
PRIMARY KEY (id)
models
id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT ,
manufacturer_id INT(10) UNSIGNED NOT NULL,
name TEXT NOT NULL ,
PRIMARY KEY (id)
Просьба подсказать, как реализовать подобное? | |
|
|
|
|
|
|
|
для: AlexK_
(22.06.2007 в 11:37)
| | Не понятно, что вызывает затруднение? manufacturer_id в любом случае придётся как-то вручную править, так как название производителей и марок машин не формализованы и нельзя по марке машины автоматически "вывести" производетеля. | |
|
|
|
|
|
|
|
для: cheops
(23.06.2007 в 10:39)
| | Честно говоря только начинаю разбираться с работой с БД.
Могли бы вы подсказать, что в данном случае значит "название производителей и марок машин не формализованы"?
Может я просто опишу задачу, возможно мой подход неверен.
Цель - создать базу данных автомобилей, (название, описание, характеристики)
Сейчас работаю над формой добавления авто в базу.
По моей идее, в поле формы (раскрывающийся список), из БД подгружается список марок,
оператор делает выбор, форма перегружается
далее по id_марки, в другое поле подгружается список моделей.
Собственно на этом все и встало.
Задача забить список в БД.
Могли бы вы помочь?
ps. забыл добавить manufacturer_id - это и есть id марки авто
manufacturers - (Это таблица марок(производителей))
id 24
name 'TOYOTA'
PRIMARY KEY (id)
models - (Это таблица моделей)
id 1
manufacturer_id 24
name 'Corolla'
PRIMARY KEY (id) | |
|
|
|
|
|
|
|
для: AlexK_
(24.06.2007 в 10:03)
| | Правильно ли я понял, что разделы списка, относящиеся к разным производителям, отделены друг от друга пустой строкой, а первая строка каждого раздела является названием производителя?
<?php
function myInsert($table, $data)
{
$sql = "INSERT INTO `$table` ";
$sep = '(';
$val = ") VALUES ";
foreach($data AS $key => $elem)
{
$sql .= "$sep `$key`";
$val .= "$sep '".mysql_escape_string($elem)."'";
$sep = ',';
}
$sql .= "$val)";
mysql_query($sql) or die("MySQL error in $sql: ".mysql_error());
return mysql_insert_id();
}
$manct = 0;
$modcnt = 0;
$fh = fopen("list.txt", "r");
while(!feof($fh)
{
do
$man = trim(fgets($fh));
while(!feof($fh) && $man == '');
$man_id = myInsert("manufactors", array("name" =>$man));
++$mancnt;
do
{
$model = trim(fgets($fh);
if($model == '')
break;
myInsert("models", array("manufactor_id"=>$man_id, "name" =>$model));
++$modcnt;
}
}
fclose($fh);
echo "Manufactors: $mancnt<br/>";
echo "Models: $modcnt<br/>";
?>
|
В принципе, стоило бы добавить в функцию код для обхода дубликатов... но исходная задача решена. | |
|
|
|
|
|
|
|
для: AlexK_
(24.06.2007 в 10:03)
| | У вас затруднение:
1) В заполнении таблиц manufacturers и models
2) или в формировании двойного выпадающего списка? | |
|
|
|
|
|
|
|
для: cheops
(24.06.2007 в 11:42)
| | В заполнении таблиц.
Trianon - Спасибо за помощь, но ругается парсер
Parse error: syntax error, unexpected '{' in /home/www/ins.php on line 27
while(!feof($fh)
{
^^^ - на эту строчку
do
$man = trim(fgets($fh));
while(!feof($fh) && $man == '');
$man_id = myInsert("manufactors", array("name" =>$man));
++$mancnt; | |
|
|
|
|
|
|
|
для: AlexK_
(24.06.2007 в 15:22)
| | Я поправил код. Возьмите еще раз.. | |
|
|
|
|
|
|
|
для: Trianon
(24.06.2007 в 15:32)
| | >Я поправил код. Возьмите еще раз..
С божьей помощью и Trianon'a все ошибки успешно побеждены.
Спасибо огромное! | |
|
|
|
|
|
|
|
для: AlexK_
(22.06.2007 в 11:37)
| | Про LOAD DATA INFILE ... знаете? http://dev.mysql.com/doc/refman/5.0/en/load-data.html | |
|
|
|
|
|
|
|
для: Osipov
(24.06.2007 в 17:14)
| | Вы готовы написать запрос, который преобразует, загруженный по LOAD DATA INFILE в один столбец, поток указанного формата в две таблицы 1:N?
:) | |
|
|
|
|
|
|
|
для: Trianon
(24.06.2007 в 21:53)
| | Читайте: "Список в текстовом формате, отформатировать
и разбить его можно как угодно"
Поэтому я и спросил, знает ли автор темы по LOAD DATA, а то вдруг, он может отформатировать так, чтобы можно было загрузить запросом LOAD DATA INFILE --- это гораздо быстрее и проще. | |
|
|
|
|
|
|
|
для: Osipov
(25.06.2007 в 14:29)
| | >Читайте: "Список в текстовом формате, отформатировать
>и разбить его можно как угодно"
Ок.
>Поэтому я и спросил, знает ли автор темы по LOAD DATA, а то вдруг, он может отформатировать так, чтобы можно было загрузить запросом LOAD DATA INFILE --- это гораздо быстрее и проще.
в две таблицы? | |
|
|
|