'field_color', // Fill these ... '' => '', '' => '', '' => '', ); // SECOND: CCK content_taxonomy fields that are configured to have MULTIPLE VALUES $vid_to_field_multivalue = array( // Example: you have a Vocabulary "Country" with vid = 2, and want to import that into fieldname field_country // '2' => 'field_country', // Fill these ... '' => '', '' => '', '' => '', ); /*********************************** ** END OF EDIT ME ** you (hopefully) don't need to change anything below this line. *********************************** */ if (intval($_GET["commit"]) != 1) { echo "

Build SQL file to migrate from core taxonomy into content_taxonomy

"; echo "Caution: This might take a while!"; exit; } header("Content-Type: text/plain"); header("Content-Disposition: attachment; filename=fix.sql"); $connection = mysql_connect($mysql_host, $mysql_user, $mysql_password) or die("Couldn't connect!"); mysql_select_db($mysql_database) or die("Couldn't do mysql_select_db()"); /** * Create SQL to import multiple-valued CCK fields */ foreach ($vid_to_field_multivalue as $vocabulary => $fieldname) { echo "## Multi value: vid=$vocabulary => fieldname=$fieldname\n"; // Get all terms assigned to nodes, ordered by node $result = mysql_query("SELECT TN.nid, TN.tid FROM ".$db_prefix."term_node TN, ".$db_prefix."term_data TD where TN.tid = TD.tid AND TD.vid = $vocabulary $where ORDER BY TN.nid $limit"); $prev_nid = 0; $tids = array(); while( $data = mysql_fetch_object($result)) { // If nid is different than last, get its last vid if ($data->nid != $prev_nid) { foreach ($tids as $delta => $tid) { $sql = sprintf("INSERT INTO ".$db_prefix."content_{$fieldname} (vid, delta, nid, {$fieldname}_value) VALUES (%d, %d, %d, %d)", $vid, $delta, $prev_nid, $tid); $sql .= " ON DUPLICATE KEY "; $sql .= sprintf("UPDATE {$fieldname}_value = %d",$tid); if ($vid) { echo $sql .";\n"; } } $vid = get_vid_from_nid($data->nid); $tids = array(); } $tids[] = $data->tid; $prev_nid = $data->nid; } foreach ($tids as $delta => $tid) { $sql = sprintf("INSERT INTO ".$db_prefix."content_{$fieldname} (vid, delta, nid, {$fieldname}_value) VALUES (%d, %d, %d, %d)", $vid, $delta, $prev_nid, $tid); $sql .= " ON DUPLICATE KEY "; $sql .= sprintf("UPDATE {$fieldname}_value = %d;",$tid); echo $sql ."\n"; } echo "\n\n"; } // Local functions... function get_vid_from_nid($nid) { global $db_prefix; static $vids = array(); if (isset($vids[$nid])) return $vids[$nid]; $result = mysql_query("SELECT vid FROM ". $db_prefix ."node WHERE nid=". $nid) or die("Could not get vid for nid = $nid"); if ($data = mysql_fetch_object($result)) { $vids[$nid] = $data->vid; return $data->vid; } else {$vids[$nid] = false; return false; } }