27 messaggi dal 11 ottobre 2001
Ho il seguente problema: devo trovare una parola in un cmpo del mio Db MySql (uso ASP).

Parto dalla classica:
cosacerco = trim(request("cosacerco"))
sql="Select * FROM tabella WHERE campo like '%" & cosacerco & "%'"


Il punto è che così cercando "ici" trovo abche "amici".
Non va neanche bene
cosacerco = " " & trim(request("cosacerco")) & " "

altrimenti cercando "amici" non troverò mai amici, (amici) amici. eccc...

Esiste qualche maniera di personalizzare il carattere jolly?? (praticamente mi servirebbe un carattere jolly che valga solo per spazi e segni di punteggiatura, parentesi, ecc...)

Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
dato che sei su mysql puoi usare le regular expressions. Ti permettono di fare una ricerca più potente e trovare, ad esempio, tutte le parole che inziano con "amici" ignorando eventuali segni di punteggiatura.

trovi degli esempi di utilizzo delle regexp in questa pagina:
http://dev.mysql.com/doc/mysql/en/Regexp.html

nel tuo caso, prova questa query:

sql="Select * FROM tabella WHERE campo REGEXP '^[^a-zA-Z0-9]*" & cosacerco & "'"

cioè, la tua stringa cosacerco verrà trovata solo se si trova all'inizio della riga e se è preceduta da 0 o più simboli che non siano compresi negli intervalli a-z A-Z 0-9.

oppure usa una regexp che restringa l'insieme dei caratteri accettabili ai soli segni di punteggiatura (escludendo così anche è ç ò ecc..):

sql="Select * FROM tabella WHERE campo REGEXP '^[[:punct:]]*" & cosacerco & "'"

fai delle prove leggi bene quel link ci trovi diverse soluzioni.
ciao
Modificato da BrightSoul il 18 settembre 2004 15.54 -

Enjoy learning and just keep making
27 messaggi dal 11 ottobre 2001
Il tuo suggerimento è stato prezioso: mi ha aperto la finestra del mondo delle REGEXP.

Ora: poiche di fatto non mi funzionano è molto probabile che io non riesca a capire la sintassi di queste regexp, ma potrebbe essere un problema del driver?

Mi spiego meglio: l'esempio che tu gentilmente mi hai scritto sql="Select * FROM tabella WHERE campo REGEXP '^[^a-zA-Z0-9]*" & cosacerco & "'" sembrerebbe risolvere a pieno il mio problema (ho controllato anche sulla documentazione e l'esperessione è semplicemente perfetta, è quello che io stesso avrei usato seguendo la documentazione)
solo che di fatto non filtra nulla ed equivale (sui risultati) in tutto e per tutto ad un like'%" & cosacerco &%'". e... non da nemmeno errore.

Da qui il dubbio: può essere non supportato dalla connessione che uso io? (ODBC con driver MySql ODBC 3.51)

grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
che versione di mysql stai usando?
io ho fatto un pò di prove con la versione 4.1.3 e sembrava funzionare a dovere.


solo che di fatto non filtra nulla ed equivale (sui risultati) in tutto e per tutto ad un like'%" & cosacerco &%'". e... non da nemmeno errore.


beh, la sua funzione è molto simile ad un like'%" & cosacerco &%' ma c'è una sottile differenza: mentre il carattere speciale % del like trova OGNI carattere, con la regexp elimini dall'insieme tutti i caratteri alfanumerici.
Esempio:

SELECT '(amici)' LIKE '%amici%'
-> 1
SELECT '(amici)' REGEXP '^[^a-zA-Z0-9]*amici'
-> 1
(danno lo stesso risultato perchè prima della stringa cercata, "amici", c'è un carattere non alfanumerico)

SELECT 'camicia' LIKE '%amici%'
-> 1
SELECT 'camicia' REGEXP '^[^a-zA-Z0-9]*amici'
-> 0
quando invece la stringa "amici" è preceduta da un carattere alfanumerico si nota la differenza.

ciao

Enjoy learning and just keep making
823 messaggi dal 05 agosto 2002
Usare un indice full text? http://www.databasejournal.com/features/mysql/article.php/1578331

Stick to your guns.
Formazione su MySQL o Firebird? Contattami!
27 messaggi dal 11 ottobre 2001
Vi ringrazio comunque: alla fine ho risolto proprio con le REGEXP con un costrutto del tipo:
sql="Select * from tabella WHERE campo REGEXP '[^[:alnum:]]"& cosacerco &"[^[:alnum:]]'".

Funziona egregiamente.

Ora le mie traversie non sono ancora finite: ora che ho recuperato i record giusti, desideo visualizzare la porzione di testo attorno al mio cosacerco.

Ho già un simpatico scriptino che prende 50 chr prima e dopo l'occorrenza, la grassetta e poi ricompatta il tutto.

Il problema è che per cercare nel campo uso un instr(rs("miocampo"),cosacerco).

Ora instr funziona esattamente come il like... e mi trovo punto a capo per la visualizzazione.

idee?

GRAZIE
11.886 messaggi dal 09 febbraio 2002
Contributi

Ora instr funziona esattamente come il like... e mi trovo punto a capo per la visualizzazione.

indubbiamente si, ma la scrematura inziale era stata fatta già dalla regexp per cui tutti i record che verranno trattati con l'instr sono solo quelli che volevi tu.

o stai usando l'instr sull query? perchè?

Enjoy learning and just keep making
27 messaggi dal 11 ottobre 2001
heheheh no, il record è quello buono (uso la regexp), per spiegarmi faccio un esempio:

Ho un campo in cui c'è il seguente testo: "Amici, possiedo molti edifici, ma per quest'anno non intendo pagare l'ici."

se cerco "ici" l'sql mi trova correttamente il record in quanto vi individua "ici" mentre pe la visualizzazione tipo google che grassetta il termine cercato uso l'instr e quindi mi evidenzierà la frase a questo modo: "...Amici, possiedo molti edifici, ma per quest'anno non intendo pagare l'ici

il problema semnra banale e di poco conto, essendo corrretto il record.. ma è decisamente inelegante e l'utilizzatore finale (che non sa che dietro cìè la regexp) mai cliccherà su quei risultati che evidenziano parti di parole che non c'entrano con quello che lui ha cercato...

mi sono chiarito?

So che a questo punto son OT in quanto non si tratta più di SQL ma di "semplice" ASP...

Grazie! :))) Marco
Modificato da azoto il 23 settembre 2004 09.09 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.