linux user group brescia

immagine del castello

Archivio della mailing list

[LugBS] dubbio sql

Claudio Tregambe info a tregambe.com
Lun 13 Giu 2016 13:33:55 UTC
Il vero problema IMHO è che la struttura della seconda tabella complica inutilmente le cose.Sempre ammesso di poter gestire il DB, io farei in sito1_options 2 colonne, una <qualchenumero> per contenere il 315 e una <qualchenome> per contenere taxonomy.Così facendo il join collega le due tabelle su chiave 315, e con una where si recuperano poi i record contenenti taxonomy.Se poi non è possibile lavorare direttamente sulla tabella sito1_options, la si crea come tmp_sito1_options con la struttura descritta sopra e il join lo si fa con la tmp_sito1_option.
Spero sia utile ;-)
Bye
Claudio
 

    On Monday, June 13, 2016 2:03 PM, Rimon Soliman <rimon.soliman a gmail.com> wrote:
 

 Ciao, propongo la mia soluzione qualora tu non potessi levare 'taxonomy_':potresti creare nella tua select di sito1_terms un campo calcolato concatenando tipo ("taxonomi_" + `term_id`) as newField e usando newField in join con sito1_options.option_name.Se non ricordo male però dovrai fare una select di una select, ovvero:
SELECT * FROM (SELECT sito1_terms.*, CONCAT("taxonomy_", sito1_terms.term_id) as newField ) AS newTable JOIN sito1_terms ON newTable.newField = sito1_options.option_name
(o qualcosa del genere, non ho controllato la correttezza sintattica)
Questo però potrebbe creare qualche problema di prestazioni se i dati sono molto voluminosi.Che ne pensate di questa opzione?
PS: Vorrei salutare tutti visto che sono iscritto da tempo ma questa è praticamente la prima volta che scrivo.Rimon.
Il giorno 13 giugno 2016 13:29, Teodoro Santoni <asbrasbra a gmail.com> ha scritto:

Ciao,

Il 13/06/16, antonello<info a antonellofacchetti.it> ha scritto:
> ho due tabelle:
>
> `sito1_terms` (`term_id`, `name`, `slug`, `term_group`)
> con esempio:
> (315, 'LA MECCANOGRAFICA SNC', 'la-meccanografica-snc', 0)
>
> e
>
> sito1_options` (`option_id`, `option_name`, `option_value`, `autoload`)
> con il record:
> 334222, 'taxonomy_315',
> 'a:1:{s:19:"avcp_codice_fiscale";s:11:"00106290190";}', 'yes'),
>
> i due record sono collegati, come si vede l'id del primo fle (315) viene
> usato per costruire il campo option_name (taxonomy_315)
>
> ora io dovrei fare un comando sql per estrarre i dati dalle due tabelle
> collegandoli.
>
> la mia ipotesi sarebbe:
> SELECT sito1_options.option_value, sito1_terms.name
> FROM sito1_options, sito1_terms
> JOINS
> sito1_terms.term_id=trim(substring_index(sito1_options.option_name,'_',-1))
> WHERE substring_index(sito1_options.option_name,'_',1)='taxonomy'
>
> ma l'errore che mi blocca è nel join...
>
> qualche suggerimento?
>
> Antonello

Potresti scegliere due strade imho:
1)
SELECT sito1_options.option_value, sito1_terms.name
FROM sito1_options JOIN sito1_terms ON
sito1_terms.term_id=trim(LEADING 'taxonomy_' FROM
sito1_options.option_name)
WHERE substring_index(sito1_options.option_name,'_',1)='taxonomy'

2) fare in modo che sia una vera fk levando quel 'taxonomy_' già
quando inserisci il dato, ergo che venga storato solo l'id, in modo
che invece di trimmare roba hai solo da comparare due numeri nel join.

--
Info/Lamentele/Segnalazioni: andrea.gelmini a gmail.com





-- 
Info/Lamentele/Segnalazioni: andrea.gelmini a gmail.com

  
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lugbs.linux.it/pipermail/lug/attachments/20160613/e8478803/attachment.html>


Maggiori informazioni sulla lista Lug