Newsgroup: it.comp.www.php
Titolo: Ricerca singola parola in campo stringa

Se io ho due campi in un db mysql
mario rossi
mario rossini
facendo una select con where nome = rossi non mi trova nessuno dei due
campi perche` cerca la stringa esatta
con una select diversa: where like %rossi% me li trova entrambi.
Come faccio a trovare la singola parola 'rossi' e quindi fare in modo
che mi trovi solo il primo campo?
Devo usare le regexp?
Fondamentalmente deve trovare risultati che non sono parti di altre
parole.
Io uso PHP 5
Grazie
-- 
Sembra sole nascente il sole d'Occidente
Sembra sole che nasce questo sole calante
Accende l'orizzonte infiamma il firmamento
Il buio lo sorprende fosco nero avvolgente

 
io dividerei il campo in due in modo da non appesantire la ricerca con regex
et similia..
comunque potresti cercare '% rossi' (nota lo spazio).. ma non e' elegante..
-- 
www.iuz-lab.info

 che mi trovi solo il primo campo?
Potresti usare le Full-Text Search Functions:
http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html
Oppure le espressioni regolari:
 select *
 from tabella
 where nome_campo regexp "[[:<:]]rossi[[:>:]]"
Per approfondire l'argomento prova a chiedere su
it.comp.software.database.
Ciao.
-- 
Federico

 Oppure le espressioni regolari:
[..]
no dai.. ora va bene che io sono maniacale in ottimizzazione come accennato
qualche thread indietro.. le regex le lascio passare ma le ricerche
full-text e' troppo..
voglio dire.. probabilmente con la mia macchina ho ucciso piu' moscerini di
quanti ne abbia mai uccisi con le mie nude mani.. ma se vedo un moscerino
infelice in giardino non vado a scaldare la macchina..
se il campo contiene un nome ed un cognome cerco un modo relativamente
veloce e sicuro per ottenere i risultati (vedi primo mio post in thread)..
-- 
www.iuz-lab.info

 le ricerche full-text e' troppo..
Mi intendo cosě poco di database, che non posso che prendere per buone
le tue osservazioni. Proprio per questo suggerivo a Wesker di
approfondire eventuali vantaggi e svantaggi sull'altro gruppo.
Ciao.
-- 
Federico

 che mi trovi solo il primo campo?
Non usare la wildcard.
Select * from tabella where campo like 'rossi' dovrebbe andare
Se vuoi cercare tutto quello che inizia con rossi fai 'rossi%' tutto
quello che finisce con rossi '%rossi', se cerchi solo rossi metti
'rossi''
Non ho provato e sono un pò arrugginito di sql,ma dovrebbe essere
corretto.
Probabilmente ti basterebbe cercare sql like su google per trovare
info precise
Ciao
Francesco

 comunque potresti cercare '% rossi' (nota lo spazio).. ma non e' elegante..
Avevo pensato anche io di mettere '% $parola %', ma con il discorso di
cui sopra ci sarebbe il problema della puntaggiatura che eliminerebbe
alcuni campi, e inoltre le parole di inzio e fine campo non verrebbero
trovate


 Select * from tabella where campo like 'rossi' dovrebbe andare
No, non va, avevo gia` provato


 it.comp.software.database.
Ok


 
se i valori sono stringhe lunghe allora la soluzione di Federico con i
full-text puo' andare bene con alcuni accorgimenti.. da come avevi posto la
domanda sembrava una situazione diversa.. cerca di regolarti in base al
numero di record / inserimento record / lunghezza / frequenza delle
richieste / etc.. le ricerche full-text possono mangiare molte risorse..
-- 
www.iuz-lab.info


[cut]
idea dove l'ottimizzazione e' = 0... se ti porti nome su una var di php e 
poi li dai di strtok in modo da splittare togliendo punti, virgole e 
quant'altro e poi ricerchi la parola nei vari token? Molto macchinoso, ma se 
non riesci tramite query su db potrebbe essere un'idea no? :P
ciao e scusa se ho detto una c@zz@ta :P