[bglug] Mysql query
Roberto Santini
roberto.santini89@gmail.com
Ven 11 Nov 2016 13:22:37 CET
Interessante l'ultima soluzione, ma mi sembra un po troppo macchinosa. In
attesa di provare ed eventualmente passare a MongoDb, per ora ho risolto
così:
- data la lista completa degli utenti, per ogni utente cerco la lista degli
attributi con id_spec, id_user e value assegnati.
- se l'array che trovo ha almeno un elemento, l'utente soddisfa per ora i
requisiti del filtro.
- se l'array ha dimensione 0, sicuramente l'utente non soddisfa le
richieste, quindi interrompo la ricerca degli attributi per quell'utente (i
filtri devono valere tutti contemporaneamente).
- alla fine della ricerca so se quell'utente soddisfa i criteri o meno,
quindi se lo mostro nella tabella o no.
Soluzione abbasta semplice ma mi rendo conto lunga e dispendiosa... su 100
utenti con 2 filtri devo eseguire al massimo 200 query.
Grazie
Roberto
Il 07 Nov 2016 9:31 AM, "Alberto Bonacina" <bonacina.alberto@gmail.com> ha
scritto:
> Il 5 novembre 2016 08:07, Roberto Santini
> <roberto.santini89@gmail.com> ha scritto:
> > Ora, ho un database con le seguenti tabelle:
> > - user: id, name
> > - spec: id, label
> > - spec_values: id, id_user,id_spec, value.
>
> Volendo potresti aggiungere alla tabella user un campo che ti dice
> quali sono le spec che l'utente ha abilitato/creato (di cui ha un
> valore nella tabella spec_values), questo potrebbe essere fatto con
> una lista di id separati da virgola oppure con un campo testuale e poi
> salvare un array con il serialize/unserialize di PHP.
> Perchè farlo? In questo modo puoi prima cercare gli utenti che hanno
> quel/quei valore/i settato/i, indipendentemente dal valore effettivo
> dello spec, e poi cercare gli effettivi valori solo tra quelli in cui
> ha senso cercare.
>
> Per vedere quali hanno quelle spec nel caso tu abbia utilizzato la
> lista di spec_id separati da virgola puoi usare il costrutto
> FIND_IN_SET di SQL e usare l'AND in questo modo
>
> SELECT * FROM user WHERE ( FIND_IN_SET (first_spec_id,user.spec_list)
> AND .... AND (nth_spec_id,user.spec_list));
>
> Una cosa a cui stare un attimo attenti è quando l'utente aggiorna la
> sua lista di spec in quanto si deve andare a modificare la tabella
> spec_values ma anche la lista di spec nella tabella user.
>
> --
> Bonacina Alberto
> Website: www.albertobonacina.com
>
> --
> Sito BgLUG: http://www.bglug.it
> Mailing list: http://lists.linux.it/listinfo/bglug
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.linux.it/pipermail/bglug/attachments/20161111/a97092dd/attachment.html>
Maggiori informazioni sulla lista
bglug