Здравсвуйте, такая штука у меня, есть 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 затолкать в друпал. Огромнейшее спасибо:)
Комментарии
если используете кавычки внутри кавычек, то их надо экранировать обратным слешем либо менять тип кавычек, например
<?php
$a = "aaa bbb 'ccc' ddd";
//или
$a = 'aaa bbb "ccc" ddd';
//или
$a = "aaa bbb \"ccc\" ddd";
?>
эээ... да и вообще какой то бред, не углядел сразу=)
<?php
"INSERT INTO project_copy (category) VALUES ((string)mysql_result(...."
?>
это как вообще? Ошибка парсера, это да, из за кавычек, однако такой код все равно работать не будет.
а где бред?:) вроде по книге:)
про кавычки спасибо) буду знать:)
Изменил вот так, работает, но криво как то. Категорий 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
}
}
}?>
никто не знает чтоли? жаль
Вобщем из первоначального поста понял задачу так - нужно во второй таблице для каждой записи добавить в столбец 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");
вот это ахренено:) я пол дня потратил разбираясь, написал десяток строк и не заработало, а тут 1 и все как по маслу:) Спасибо большое.
Вопрос только возник, что значит s и f после написания таблиц, наверное для дальнейшей обращения к ним?
Это просто сокращения от названий таблиц для более короткой записи. С таким же успехом можно было бы написать se и fi или что угодно.
еще раз спасибо:)