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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Список в Базу Данных
 
 автор: AlexK_   (22.06.2007 в 11:37)   письмо автору
 
 

Здравствуйте.
Есть список марок автомобилей и различных моделей этих марок.
Т.е. так

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)

Просьба подсказать, как реализовать подобное?

   
 
 автор: cheops   (23.06.2007 в 10:39)   письмо автору
 
   для: AlexK_   (22.06.2007 в 11:37)
 

Не понятно, что вызывает затруднение? manufacturer_id в любом случае придётся как-то вручную править, так как название производителей и марок машин не формализованы и нельзя по марке машины автоматически "вывести" производетеля.

   
 
 автор: AlexK_   (24.06.2007 в 10:03)   письмо автору
 
   для: 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)

   
 
 автор: Trianon   (24.06.2007 в 11:36)   письмо автору
 
   для: 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/>";
?>

В принципе, стоило бы добавить в функцию код для обхода дубликатов... но исходная задача решена.

   
 
 автор: cheops   (24.06.2007 в 11:42)   письмо автору
 
   для: AlexK_   (24.06.2007 в 10:03)
 

У вас затруднение:
1) В заполнении таблиц manufacturers и models
2) или в формировании двойного выпадающего списка?

   
 
 автор: AlexK_   (24.06.2007 в 15:22)   письмо автору
 
   для: 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;

   
 
 автор: Trianon   (24.06.2007 в 15:32)   письмо автору
 
   для: AlexK_   (24.06.2007 в 15:22)
 

Я поправил код. Возьмите еще раз..

   
 
 автор: AlexK_   (24.06.2007 в 15:43)   письмо автору
 
   для: Trianon   (24.06.2007 в 15:32)
 

>Я поправил код. Возьмите еще раз..

С божьей помощью и Trianon'a все ошибки успешно побеждены.
Спасибо огромное!

   
 
 автор: Osipov   (24.06.2007 в 17:14)   письмо автору
 
   для: AlexK_   (22.06.2007 в 11:37)
 

Про LOAD DATA INFILE ... знаете? http://dev.mysql.com/doc/refman/5.0/en/load-data.html

   
 
 автор: Trianon   (24.06.2007 в 21:53)   письмо автору
 
   для: Osipov   (24.06.2007 в 17:14)
 

Вы готовы написать запрос, который преобразует, загруженный по LOAD DATA INFILE в один столбец, поток указанного формата в две таблицы 1:N?
:)

   
 
 автор: Osipov   (25.06.2007 в 14:29)   письмо автору
 
   для: Trianon   (24.06.2007 в 21:53)
 

Читайте: "Список в текстовом формате, отформатировать
и разбить его можно как угодно"

Поэтому я и спросил, знает ли автор темы по LOAD DATA, а то вдруг, он может отформатировать так, чтобы можно было загрузить запросом LOAD DATA INFILE --- это гораздо быстрее и проще.

   
 
 автор: Trianon   (25.06.2007 в 15:28)   письмо автору
 
   для: Osipov   (25.06.2007 в 14:29)
 

>Читайте: "Список в текстовом формате, отформатировать
>и разбить его можно как угодно"

Ок.

>Поэтому я и спросил, знает ли автор темы по LOAD DATA, а то вдруг, он может отформатировать так, чтобы можно было загрузить запросом LOAD DATA INFILE --- это гораздо быстрее и проще.

в две таблицы?

   
Rambler's Top100
вверх

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