Ciao, sto trasferendo un forum realizzato con Simple Machine Forum in Drupal.
SMF ha una tabella dove ha i dati del topic (id del messaggio iniziale, numero di visite, quando è stato creato, se è attivo, altre informazioni) ed ha una tabella dei messaggi, tra cui anche il messaggio iniziale
Drupal invece gestisce il primo post come un contenuto e le risposte come dei commenti.
Quindi nel primo passaggi creo i vari "primi post" basandomi sul "id_first_msg" presente nel "topic" e nel secondo creo i commenti basandomi tu tutti i messaggi che hanno lo stesso "id_topic", ma ovviamente il primo messaggio fa parte del "topic" quindi verrebbe ripetuto anche nei commenti.
So' che sembra strana come cosa ed un doppio lavoro, ma sto utilizzando un modulo/piccolo framework chiamato Migrate per importare i dati e ad esempio con queste poche righe di asocciazione:
$this->addFieldMapping('title','subject');
$this->addFieldMapping('body', 'body')->arguments(array('format' => 'filtered_html'));
$this->addFieldMapping('field_old_id','old_id');
$this->addFieldMapping('taxonomy_forums','id_cat')->arguments(array('source_type' => 'tid'));
$this->addFieldMapping('created','poster_time');
$this->addFieldMapping('changed','modified_time');
$this->addFieldMapping('status','approved');
$this->addFieldMapping("uid","uid2");
$this->addFieldMapping("totalcount","num_views");
$this->addFieldMapping("pathauto")->defaultValue(0);
mi viene creato il primo post con la data nel passato, mi viene associato all'utente (io passo a Migrate l'ID dell'utente sul DB vecchio e lui me lo traduce con l'ID nuovo), viene settata la categoria del forum corretta (ed anche in questo caso io passo la categoria che ho sul db, e MIGRATE me la trasforma nella nuova creata in precedenza), ed altre cose. Con la funzioanlità di Rollback. Se usate Drupal e dovete importare vecchi dati è il modulo che fa per voi.
Per prova ho utilizzato il "NOT IN" :
$query->where ('m.id_msg not in (SELECT id_first_msg FROM smf_topics) and m.id_topic <= 1544');
e considerando che i messaggi non sono tantissimi non ci mette poi molto. E' anche una situazione di import quindi anche aspettare quei 2-3 secondi prima che inizi l'import non è poi una gran perdita.