Показать сообщение отдельно
Старый 22.04.2005, 16:09   #10   
Форумец
 
Аватар для pegas1981
 
Сообщений: 6,803
Регистрация: 10.06.2004
Возраст: 44

pegas1981 вне форума Не в сети
Решил самостоятельно

короче был файлец такого вида:
уровень|номер товара|наименование|наличие|цена1|цена2
1|100|МЕТАЛЛ
2|100000|АРМАТУРА
3|100100|Арматура 6 мм|1|23844.00|19870.00
3|100200|Арматура 8 мм|1|23064.00|19220.00
3|100300|Арматура 10 мм|1|21300.00|17750.00
2|200000|БАЛКА
3|200100|Балка №10|0|10800.00|9000.00
3|200200|Балка №12|1|22860.00|19050.00
3|200300|Балка №12 Б1|1|22500.00|18750.00

а надо было сделать такого:
id|par_id|уровень|номер товара|наименование|наличие|цена1|цена2
1|1|1|100|МЕТАЛЛ
2|1|2|100000|АРМАТУРА
3|2|3|100100|Арматура 6 мм|1|23844.00|19870.00
4|2|3|100200|Арматура 8 мм|1|23064.00|19220.00
5|2|3|100300|Арматура 10 мм|1|21300.00|17750.00
6|1|2|200000|БАЛКА
7|6|3|200100|Балка №10|0|10800.00|9000.00
8|6|3|200200|Балка №12|1|22860.00|19050.00
9|6|3|200300|Балка №12 Б1|1|22500.00|18750.00

т.е. добавить 2 столбца с идентификаторами уровня вложенности, по которым в дальнейшем при рекусивной выборке из базы будут браться данные.

вопрос решил самостоятельно... кому интересно вот код... правда он получился так сказать не очень удобоваримым... может кто посоветует как упростить?

[PHP]
function loadFile($usertable, $dbname, $file_db)
{
$file=file($_SERVER['DOCUMENT_ROOT'].$file_db);
$col=count($file);
$id=0;
$idp=array(0=>0, 1=>0);
$level=1;
$levelNew=1;
$idpar=0;
while (list($k, $v)=each($file))
{
$line=explode('|', $v);
$m=0;
foreach($line as $key=>$value)
{
switch ($key)
{
case 0: $colName[$key]='level';
break;
case 1: $colName[$key]='idprod';
break;
case 2: $colName[$key]='text1';
break;
case 3: $colName[$key]='text2';
break;
case 4: $colName[$key]='text3';
break;
case 5: $colName[$key]='text4';
break;
}
if ($m==0)
$id++;
if ($colName[$key]=='level')
$levelNew=$value;
if ($level<$levelNew)
{
$level=$levelNew;
if ($id>1)
{
$idp[$levelNew]=$id-1;
$idpar=$idp[$levelNew];
}
else
{
$idp[$levelNew]=$id;
$idpar=$idp[$levelNew];
}
}
if ($level>=$levelNew)
{
$level=$levelNew;
if ($idp[$levelNew]==0)
$idp[$levelNew]=1;
$idpar=$idp[$levelNew];
}
if ($m==0)
{
$query=mysql_query("INSERT IGNORE INTO $usertable (id, idp, ".$colName[$key].") VALUES ('".$id."', '".$idpar."', '".$value."');");
$m=1;
}
else
$query=mysql_query("UPDATE IGNORE ".$usertable." SET id='".$id."', id='".$idpar."', ".$colName[$key]."='".$value."';");
}
}
}
}
[/PHP]

Всем огромное спасибо за участие и помощь. :idolater:
  Ответить с цитированием