Quale MySQL Query per estratte Termini Tassonomia associati a nessun nodo?

4 contenuti / 0 new
Ultimo contenuto
Quale MySQL Query per estratte Termini Tassonomia associati a nessun nodo?

Io vorrei rimuovere da un vocabolario i termini taxonomy che non sono associati ad alcun nodo, quindi che possono considerardi dei termini orfani.

Al momento quello che ho inquadrato è che esiste il vid che identifica il vocabolario di apparteneza dei termini ed il tid che identifica i termini di tassonomia.

Ed ho preparato questa query su due tabelle, però non sono sicuro del suo corretto funzionamento.

SELECT *
FROM `term_data` , `term_node`
WHERE `term_data`.`tid` != `term_node`.`tid`
AND `term_data`.`vid` =15
LIMIT 0 , 10000

Mi aiutate ad impostare una query specifica?

Vi informo anche che dopo averli rintracciati tutti, io questi termini li voglio rimuovere dalla tabella o tabelle in cui si trovano.

ciao, purtroppo una semplice query non basta, le join che puoi realizzare permettono di estrarre glielementi associati, ma non quelli non associati, per cui devi procedere per step, io procederei così:

  1. estrarre tutti i termini (associati e non) e metterli in un array
  2. estrarre tutti i termini associati ad un nodo e metterli in un secondo array
  3. effettuare la differenza tra i due array (vedi http://php.net/array_diff )
  4. cancellare i termini rimanenti

tieni però presente che se hai dei termini non collegati ad un nodo, non necessariamente sono dei termini "inutili", potrebbero essere utilizzati in altri contesti.

Ciao
Marco
--
My blog
Working at @agavee

Io creo siti web, clonando il DB di siti web già esistenti.

Visto che questo procedimento è di una efficacia esterma, sto cercando alcuni punti utili per la pulizia del data base.

Questa discussione è nata dal fatto di non volere rimuovere sempre un dato vocabolario per poi ricrearlo uguale e dover riassociarlo tra i vari moduli che lo utilizzato (nodewords, term_display, feeds, ecc ecc).

Di conseguenza poter rimuovere tutti i termini con una query sarebbe una cosa molto pratica e comoda. In più se sono già stati creni nuovi nodi con nuovi termini, poter rimuovere tutti i vecchi termini associati a nessun nodo (xkè i vecchi nodi li hai già rimossi tutti con il modulo delete all) diventa una pratica molto più efficace.

Direi che così si fa tutto FORSE...

Questo x rintracciare i termini non associati ad alcun nodo

SELECT *
FROM `term_data`
WHERE `vid` =15
AND `tid` NOT
IN (
SELECT `tid`
FROM `term_node`
)
LIMIT 0 , 5000

Questo x rintracciare le gerarchie non + esistenti o mai esistite, visto che comunque in ogni caso c'è un rigo x ogni termine esistente

SELECT *
FROM `term_hierarchy`
WHERE `tid` NOT
IN (
SELECT `tid`
FROM `term_data`
)
LIMIT 0 , 5000