php запрос на перенос таблиц

Главные вкладки

Аватар пользователя Splinter Splinter 26 июля 2009 в 13:35

Здравсвуйте, такая штука у меня, есть 2 таблицы в базе, 1 с категориями, а 2 со всяческой информации о товаре.
Каждая категория в 1 таблице имеет свой id, он совпадает с pid во 2-ой таблице, тем самым каждый товар относится к одной из категорий. Несколько товаров может относится к одной и той же категории.
Так задача в том что надо перенести значения поля item_name (русское название категории) из 1 таблицы во 2-ую таблицу, причем перенести с условием что id категории совпадает с pid , в специальное поле category.

Написал такой код:

<?php
$link 
mysql_connect('localhost''root''root') or die("Could not connect : " mysql_error()); //подсоедниились к хосту
mysql_select_db('22'$link) or die("Could not select database"); //выюрали базу
mysql_query("SET NAMES utf8"); //выставили кодировку

$k=0;
$result mysql_query"SELECT id, item_name FROM project_cat_copy"$link); //получили поля id и item_name из таблицы 
$resultPID mysql_query"SELECT pid FROM project_copy_backupn"$link); //получили поле pid из таблицы 
for($i 1$i mysql_num_rows($result); $i++){
    for(
$j 1$j mysql_num_rows($resultPID); $j++){
        
$k = (int)mysql_result($result$i"id");
        
        if(
$k == (int)mysql_result($resultPID$j"pid")){
            
$query "INSERT INTO project_copy (category) VALUES ((string)mysql_result($result$i, "item_name"))";
            
$resultQuery mysql_query($query);
        }
    }    
}
?>

Выдвет ошибку: Parse error: parse error in Z:\home\apn.ru\www\cat.php on line 13

Подскажите как импортировать, правильно ли я делаю, в инете что то искал искал, так и не могу врубиться.

Вообще все это нужно чтобы привести базу данных на самописном движке в нормальный вид, а потом сначало через экспорт csv файла, с помощью модуля node import затолкать в друпал. Огромнейшее спасибо:)

Комментарии

Аватар пользователя kosilko kosilko 26 июля 2009 в 13:44

"Splinter" wrote:

<?php
$query 
"INSERT INTO project_copy (category) VALUES ((string)mysql_result($result$i, "item_name"))";?>


если используете кавычки внутри кавычек, то их надо экранировать обратным слешем либо менять тип кавычек, например

<?php
$a 
"aaa bbb 'ccc' ddd";
//или 
$a 'aaa bbb "ccc" ddd';
//или 
$a "aaa bbb \"ccc\" ddd";
?>
Аватар пользователя kosilko kosilko 26 июля 2009 в 13:49

эээ... да и вообще какой то бред, не углядел сразу=)

<?php
"INSERT INTO project_copy (category) VALUES ((string)mysql_result(...."
?>

это как вообще? Ошибка парсера, это да, из за кавычек, однако такой код все равно работать не будет.

Аватар пользователя Splinter Splinter 26 июля 2009 в 17:20

Изменил вот так, работает, но криво как то. Категорий 250 примерно, товара 8500, 30 сек по умолчанию не хватает на выполнение скрипта. Так как все не получается обработать, то в базе поле category заполняется последним что было в переменной $my_var. Пробовал всяческие echo ставить, вся выборка происходит верно. Кол-во совпадений для каждой категории тоже считает, рядом выводил название терминов, тоже все разные. Вот только в базу криво пишет все.

<?php
$result 
mysql_query"SELECT id FROM project_cat_copy"$link); //получили поле id из таблицы 
$resultItem mysql_query"SELECT item_name FROM project_cat_copy"$link); //получили поле item_name из таблицы 
$resultPID mysql_query"SELECT pid FROM project_copy_backupns"$link); //получили поле pid из таблицы 
for($i 1$i mysql_num_rows($result); $i++){
    
$z=0;
    for(
$j 1$j mysql_num_rows($resultPID); $j++){
        
$k = (int)mysql_result($result$i"id"); //получаем id категории из i-ой строки и преобразуем в число
        
$m = (int)mysql_result($resultPID$j"pid"); // получаем pid товара из j-ой строки и преобразуем в число
        
if($k == $m){ // сравниваем, дабы присвоить категорию только тем товарам у которых установлен pid равный id категории
            
$my_var = (string)mysql_result($resultItem$i"item_name"); //получаем название категории
            
$query "UPDATE project_copy_backupns SET category='$my_var'"//пишем запрос на обновление поля category в таблице project_copy_backupns
            
$resultQuery mysql_query($query); //выполняемзапрос на обновление поля category в таблице project_copy_backupns
        
}
    }
}
?>
Аватар пользователя gorr gorr 26 июля 2009 в 20:30

Вобщем из первоначального поста понял задачу так - нужно во второй таблице для каждой записи добавить в столбец category_name название категории, id которой находится в этой же записи в столбце pid.
Тогда так:

mysql_query("UPDATE second_table s SET s.category_name=(SELECT name FROM first_table f WHERE f.id=s.pid)");

ли так еще:

mysql_query("UPDATE second_table s INNER JOIN first_table f ON f.id=s.pid SET s.category_name=f.name");

или так:

mysql_query("UPDATE second_table s ,first_table f SET s.category_name=f.name WHERE s.pid=f.id");

Аватар пользователя Splinter Splinter 26 июля 2009 в 21:16

вот это ахренено:) я пол дня потратил разбираясь, написал десяток строк и не заработало, а тут 1 и все как по маслу:) Спасибо большое.
Вопрос только возник, что значит s и f после написания таблиц, наверное для дальнейшей обращения к ним?

Аватар пользователя gorr gorr 26 июля 2009 в 21:27

Это просто сокращения от названий таблиц для более короткой записи. С таким же успехом можно было бы написать se и fi или что угодно.