PDA

View Full Version : Una query che non mi riesce...


Brostin
01-03-2007, 15:02
Salve gente, ricorro al vostro aiuto per un problema al quale non riesco a venire a capo.
Vorrei sostanzialmente che la select mi estraesse tutti i record dove compare il valore 5.
Quindi...

SELECT
proto.protocolloID,
proto.A_P,
proto.estensione,
FROM
proto
WHERE
(proto.estensione = 5)

e il codice restituisce correttamente tutti i record che sono valorizzati a 5 nel campo proto.estensione.

Il mio problema č che nel campo proto.estensione i valori presenti possono essere anche + di uno, ad esempio:

opz.1) su record 1 il valore del campo proto.estensione č pari a 5 ( unico valore )
opz.2) su record 2 il valore del campo proto.estensione č pari a 3 e 5 ( cioe' due valori distinti) in questa modalitā : 3,5
opz.3) su record 3 il valore del campo proto.estensione č pari a 3,5 e 9 ( cioe' tre valori distinti) in questa modalitā 3,5,9
opz.4) su record 4 il valore del campo proto.estensione č pari a 3,5,15 ecc.


Come posso operare se volessi quindi estrarre i records dove compare il valore 5 relativamente alle opzioni
n. 1 2 e 3.

Ho provato l'operatore Like ma i risultati non sono precisi.

Like o = 5 mi restituisce solo i record dove esiste un solo valore pari a 5

yorkeiser
01-03-2007, 15:28
WHERE
X='5' or
X LIKE '%,5,%' or
X LIKE '5,%' or
X LIKE '%,5'

EDIT
Questo nel caso i tuoi record siano delle stringhe con i numeri separati dalle virgole e senza spazi, tipo "1,4,5,7,8"

Brostin
02-03-2007, 08:16
WHERE
X='5' or
X LIKE '%,5,%' or
X LIKE '5,%' or
X LIKE '%,5'

EDIT
Questo nel caso i tuoi record siano delle stringhe con i numeri separati dalle virgole e senza spazi, tipo "1,4,5,7,8"

Perfetto!! Ora vengo alla seconda parte della domanda che non avevo preannunciato per non generare confusione.
Il dato 5 in realtā non č un dato statico ma dinamico in quanto dovrebbe essere valorizzato da una variabile. Mi spiego meglio.

Nel mio database ci sono n utenti ognuno dei quali possiede ovviamente un userID. Come penso avrai capito vorrei che il valore di 5 fosse in realtā valorizzato a seconda dell'utente che esegue il login al sistema.

Ti passo la palla e spero anche stavolta di essere stato chiaro... grazie...

franksisca
02-03-2007, 08:29
basta mettere il nome della variabile che contiene l'id dello user, non vedo il problema......se stai facendo il login da software basta memorizzarti la variabile, se invece lo stai facendo via web, lo tiene la session(o il bean)

yorkeiser
02-03-2007, 09:20
Perfetto!! Ora vengo alla seconda parte della domanda che non avevo preannunciato per non generare confusione.
Il dato 5 in realtā non č un dato statico ma dinamico in quanto dovrebbe essere valorizzato da una variabile. Mi spiego meglio.

Nel mio database ci sono n utenti ognuno dei quali possiede ovviamente un userID. Come penso avrai capito vorrei che il valore di 5 fosse in realtā valorizzato a seconda dell'utente che esegue il login al sistema.

Ti passo la palla e spero anche stavolta di essere stato chiaro... grazie...

Dipende da cosa stai utilizzando. Se il tuo DB permette di fare query parametriche basta che passi il numero dall'esterno come un parametro; stai chiamando il DB da un'applicazione, e nel caso in quale linguaggio? E che tipo di DB hai ?

Brostin
02-03-2007, 12:50
Dipende da cosa stai utilizzando. Se il tuo DB permette di fare query parametriche basta che passi il numero dall'esterno come un parametro; stai chiamando il DB da un'applicazione, e nel caso in quale linguaggio? E che tipo di DB hai ?

Perdonami per non averti passato subito queste informazioni. Dunque trattasi di una piccola applicazione Web strutturata su DB Mysql mentre le chiamate al db vengono eseguite su pagine php....

yorkeiser
02-03-2007, 14:06
Su questo non posso aiutarti, non conosco php nč utilizzo mySQL. Troverai sicuramente qualcuno qui che ti dā una mano.
Nel caso tu faccia la chiamata al DB direttamente da php inizializzando la query come una stringa all'interno del codice, basta che ti costruisci la stringa sostituendo al 5 una variabile che hai inizializzato col numero corretto.

Esempio in pseudocodice:

String a="13";
"SELECT * FROM PINCOPALLINO WHERE X=' " + a + " ' "

In questo caso, la parte in rosso č la parte "variabile" della query, che viene valutata (a=13) e concatenata (supponendo che l'operatore di concatenamento tra stringhe sia il +) al resto della stringa, quindi ti ritornerebbe

SELECT * FROM PINCOPALLINO WHERE X=' 13 '