перелить из одной таблицы в другую..

Alexos

Новичок
перелить из одной таблицы в другую..

Вот источник:
CREATE TABLE menu_cat (
cat_id int(10) NOT NULL auto_increment,
parent_id int(10) default NULL,
cat_name varchar(200) default NULL,
PRIMARY KEY (cat_id)
)

Это куда надо залить:
CREATE TABLE categories (
cid int(10) unsigned NOT NULL auto_increment,
title varchar(128) NOT NULL default '',
cleft int(10) unsigned NOT NULL default '0',
cright int(10) unsigned NOT NULL default '0',
clevel int(10) unsigned NOT NULL default '0',
PRIMARY KEY (cid),
KEY cleft (cleft, cright, clevel)
)

Метода такого в классе CDBTree (http://max.phpclub.net/sources/dbtree.phps) к сожалению нет..
метод insert это имхо не то, так как он возвращает insert_id()
а мне надо вставить те ID, что уже имеются в первой таблице..
Может кто сталкивался с такой проблемой? Подскажите решение..
 

Макс

Старожил PHPClub
а ты пробовла все-таки использовать метод insert()
и в массиве указывать 'cid'=>$res['cat_id'] ?
 

Alexos

Новичок
а ты пробовла все-таки использовать метод insert()
и в массиве указывать 'cid'=>$res['cat_id'] ?
а чего тут пробовать?..
метод insert() он назначает айди новой записи.. а у меня уже есть список айди.. и его надо сохранить :(
Я просто пытаюсь перейти на новый алгоритм (Nested Sets), так старый тормозной слишком оказался..
Там база огромная.. И я хочу сохранить эти связи перелив всё в новую таблицу.. Не перебивать же всё заново вручную :(
 

Макс

Старожил PHPClub
метод insert() не назначает никаких новых ИД. Он делает insert-запрос на основе указанных данных.
если ты не укажешь в массиве значение для CID, оно будет назначено mysql (как для обычных auto_increment-полей).
Если ты укажешь значение, то оно будет использовано в insert-запросе и вставлено в таблицу
 

Alexos

Новичок
function insert($ID, $data)
Maxim Matyukhin
ты имеешь ввиду второй аргумент?
Блин! Туплю! Я думал, что туда только title вставляется :):):)

-~{}~ 17.02.04 19:56:

Maxim Matyukhin

А всё-таки ни фига не получается:
PHP:
$id_name="cid";         // имя поля первичного ключа
$field_names = array( // имена полей таблицы
   'left' => 'cleft',
   'right'=> 'cright',
   'level'=> 'clevel',
);

$dbh = new CDataBase(DBname, HostName, DBUserName, DBPass);

require_once "dbtree.php";
$Tree = new CDBTree($dbh, CategoriesTable, $id_name, $field_names);

$query = "SELECT * FROM menu_cat";
$result = $dbh->query($query);

while ($row = $dbh->fetch_array($result)){
       $Tree->insert($row['parent_id'], array("cid"=>$row['cat_id'], "title"=>$row['cat_name']));
} // while
Ответ phpDbTree error

что я делаю не так?
 

Макс

Старожил PHPClub
тупо делать insert здесь не пойдет.
Во-первых сначало надо создать корень дерева (метод clear())
Во-вторых insert-ы надо делать с учетом что узел с parent_id уже существует.
 
Сверху