Newsgroup: it.comp.software.database
Titolo: aiuto query stringa

da un campo nome voglio selezionare tutti i record che contengono una
determinata stringa, ma voglio che vi siano prima quelli che iniziano con
quella stringa e poi gli altri; ad esempio se cerco "zia" nei due record
seguenti
agenzia
zia maria
il db mi restituisce prima agenzia e poi zia; io invece voglio prima i
record che iniziano con la stringa da cercare e poi gli altri;
grazie
angelo
ps. uso access.

 seguenti
io farei due select con UNION
brutto? ;)

 ha scritto nel messaggio
news:KYzBc.9196$GQ3.2...@twister2.libero.it...

---------------
SELECT Nome
From  Tabella1
Order By Iif(Left(Nome,4)='Zia ',0,1),Nome
---------------
Ciao Giorgio

 news:KYzBc.9196$GQ3.2...@twister2.libero.it...
ops manca la ricerca ma il concetto non cambia
-------------
Select Nome
From  Tab1
Where Nome Like '*zia*'
Order By Iif(Left(Nome,3)='Zia',0,1),Nome
-------------
Ciao Giorgio

 ha scritto nel messaggio
news:2job26F...@uni-berlin.de...

se intendi questo
SELECT nome
FROM tabella
WHERE nome LIKE (stringa & "*")
UNION SELECT nome
FROM tabella
WHERE nome LIKE ("*" & stringa & "*") AND nome NOT LIKE (stringa & "*")
ho già provato e non funziona, cioè li ordina sempre a modo suo, anche
invertendo le due select;
hai qualche altra idea?

 -------------
perfetta!
a LEFT ci arrivo, ma non conosco l'istruzione IIF ed anche guardando nella
guida non ho ben capito a cosa serva; me lo spiegheresti terra terra?
ho provato a fare l' ORDER BY IIF per più campi contemporaneamente, ma mi
dice che l'istruzione è troppo complessa, possibile?
grazie mille
angelo


se le IIF annidate sono molte ( 20 o piů) sě altrimenti prova a postare la
Order By che hai costruito.
Ciao Giorgio


semplificando ecco la query;
SELECT Tabella.Campo1, Tabella.Campo2
FROM Tabella
WHERE (Tabella.Campo1 Like "*" & form1 & "*") AND
(Tabella.Campo2 Like "*" & form2 & "*")
ORDER BY
IIF( LEFT( Tabella.Campo1,LEN(form1)) = form1,0,1),
IIF( LEFT( Tabella.Campo2,LEN(form2)) = form2,0,1);
il problema dovrebbe essere l'istruzione LEN doppia; infatti se al posto di
LEN metto dei numeri tutto funziona; potrei semplificare definendo due
variabili per i due LEN, ma come?
se poi lascio vuoti i due valori da cercare, cioč form1 e form2, dovrebbe
darmi tutti i record ed invece mi restituisce sempre che la query č troppo
complessa;

 ha scritto nel messaggio
news:wbYBc.12145$c_1.3...@twister1.libero.it...

Ciao, il problema deriva dal valore NULL presente in form1 o form2 (che
penso siano un'abbreviazione per indicare il controllo di una maschera).
per risolvere
-------------------------
ORDER BY
IIF( LEFT( Tabella.Campo1,LEN('' & form1)) = '' & form1,0,1),
IIF( LEFT( Tabella.Campo2,LEN('' & form2)) = '' & form2,0,1);
--------------------------
Ciao Giorgio


hai proprio centrato il problema; prendendo spunto dal tuo esempio ho fatto
cosě
ORDER BY
IIF( LEFT( Tabella.Campo1,LEN(form1 & "*")) = form1 & "*",0,1),
IIF( LEFT( Tabella.Campo2,LEN(form2 & "*")) = form2 & "*",0,1);
un'ultima cosa; si puň inserire un controllo sui valori di form1 e form2 in
modo che se uno dei due č vuoto l'ordinamento venga fatto prima sull'altro?
grazie mille
angelo


In questo caso ti conviene comporre l'istruzione Sql da VBA in modo da
includere solo il filtro e l'ordinamento che ti serve.
Ciao Giorgio


ok, grazie mille ancora per le dritte;
ciao
angelo