Pagina 1 di 1

ricerca in multi select field

Inviato: 04 ago 2021, 08:57
da Sandrol
Salve a tutti, scrivo per un consiglio.

ho usato in alcun form il campo multiselect esempio per i codici utente

ora nel db il campo viene memorizzato con i valori chiave separati dal carattere da me scelto: '-'

2-9-16-19-20-22 ecc..

normalmente prima di usare scriptcase gli stessi valori li memorizzavo in questo modo:
-2-9-16-19-20-22- ecc..

a questo punto come posso far funzionare la ricerca? prima basta un like %-Valore-%

ora l'assenza del carattere di separazione in testa e in coda non mi consente più di usare questo tipo di ricerca
e di contro like %valore% chiaramente fallisce (il valore 2 è presente sia sul primo che sull'ultimo)..............

Vi chiedo qualche suggerimento grazie.

Re: ricerca in multi select field

Inviato: 07 ago 2021, 10:14
da rino
porta in un array e fai la ricerca li

Re: ricerca in multi select field

Inviato: 08 ago 2021, 22:34
da Vincenzo
Sandrol ha scritto: 04 ago 2021, 08:57
2-9-16-19-20-22 ecc..

normalmente prima di usare scriptcase gli stessi valori li memorizzavo in questo modo:
-2-9-16-19-20-22- ecc..

a questo punto come posso far funzionare la ricerca? prima basta un like %-Valore-%
aggiungi delle condizioni, se prima usavi like '%-Valore-%' adesso prova ad usare


( like '%-Valore-%' OR like 'Valore-%' OR like '%-Valore' )

così prendi tutti i casi "in mezzo" e gli eventuali casi in cui il valore sia il primo o l'ultimo.

Verificherei anche cosa viene memorizzato nel campo se si sceglie un unico valore, ed eventualmente aggiungere anche quel caso se non ricadesse in quelli messi prima.

Re: ricerca in multi select field

Inviato: 10 ago 2021, 08:06
da Sandrol
Grazie per le risp, interessante quella di Vincenzo io ho risolto in questo modo:
Ho creato un campo per la ricerca e ho impacchettato la stringa aggiungendo 0 non significativi nell'evento onbiforinsert e onbiforupdate.

$tab_utenti=explode('-',{idClientManager});
for ($i = 0, $n = count($tab_utenti) ; $i < $n ; $i++)
{
$tab_utenti[$i] = sprintf('%05d', $tab_utenti[$i]);
}
{filtro_ClientManager}=implode("-", $tab_utenti);

Comunque la soluzione di Vincenzo mi sembra migliore della mia provo con una verifica per vedere se funziona, quando il campo ha una sola selezione memorizza solo il valore.
Ciao.

Re: ricerca in multi select field

Inviato: 10 ago 2021, 09:42
da Sandrol
Ho effettuato la prova e sembra che funzioni bene discrimina tra i valori 2- e 22- / -2 -22
Ciao

Re: ricerca in multi select field

Inviato: 19 ago 2021, 20:00
da Vincenzo
Non hai specificato che database usi, ma se usi MYSQL, potresti provare a vedere se fa per te la funzione

FIND_IN_SET(str,strlist)

la funzione cerca un valore, in una stringa di valori separatati da virgole, quindi nel tuo caso prima di questa funzione devi chiamare una funzione di REPLACE per cambiare il carattere separatore, ma almeno resta tutto in una query sul database senza scomodare cicli in PHP.

Re: ricerca in multi select field

Inviato: 20 ago 2021, 09:29
da Sandrol
Ciao Vincenzo, grazie per l'ulteriore suggerimento, provo anche questo ma ritengo valido il tuo primo (anche quello si riduce a una query) il mio dubbio era se distingueva tra i valori "ripetuti" es: 2 e 22 - 5 55 cosa che in effetti avviene risolvendo il problema.
Dimenticavo MYsql......

Re: ricerca in multi select field

Inviato: 20 ago 2021, 15:59
da Vincenzo
Sandrol ha scritto: 20 ago 2021, 09:29 Ciao Vincenzo, grazie per l'ulteriore suggerimento, provo anche questo ma ritengo valido il tuo primo (anche quello si riduce a una query) il mio dubbio era se distingueva tra i valori "ripetuti" es: 2 e 22 - 5 55 cosa che in effetti avviene risolvendo il problema.
Dimenticavo MYsql......
Non sapendo le dimensioni della tabella da interrogare, mi chiedevo se FIND_IN_SET + REPLACE fosse più performante di tre LIKE, dove probabilmente per numero di record limitati non ci sono apprezzabili differenze nei tempi di risposta.

Re: ricerca in multi select field

Inviato: 21 ago 2021, 09:26
da Sandrol
Si nel mio caso si tratta di una tab con pochi records relativa ai commerciali dell'azienda. pesavo che volendo si può anche evitare il REPLACE modificando il campo di selezione nella form di scriptcase da "-" a "," . Quando ho 5 minuti lo provo Ciao...