290 messaggi dal 08 luglio 2008
Ciao a tutti,

ho la necessita in un catalogo prodotti fatto in sql server e asp.net di far ricercare uno o piu termini all'utente.

Quello che vorrei fare è:

se l'utente cerca: bicchiere plastica biodegradabile, la query ricerchi tutti i prodotti che nella descrizione abbiano questo termine ma anche non esattamente nell'ordine scritto (quindi anche bicchiere biodegradabile, o, plastica biodegradabile bicchiere...), l'importante però che ci siano tutti i termini (quindi non vanno prelevati i prodotti che contengono solo la parola bicchiere, o plastica...)

come posso fare?

grazie
678 messaggi dal 12 maggio 2001
www.idioteca.it
Prova a cercare informazioni sulla ricerca full-text e in particolare sui predicati FREETEXT e CONTAINS.
ciao
290 messaggi dal 08 luglio 2008
e se usassi una sintassi del genere?
...where descrizioneProdotto like '%bicchieri%' AND descrizioneProdotto like '%plastica%' descrizioneProdotto like '%biodegradabili%'
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
webbondo wrote:
e se usassi una sintassi del genere?
..where descrizioneProdotto like '%bicchieri%' AND descrizioneProdotto like '%plastica%' descrizioneProdotto like '%biodegradabili%'

si, la ricerca incontra la tua richiesta specifica, anche se ovviamente i filtri in LIKE sono pesanti..
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
290 messaggi dal 08 luglio 2008
grazie per la risposta, ma come faccio ad ottenere una sintassi del genere usando i sqlparameter? (non vorrei espormi usando la classica concatenazione di stringhe che potrebbero dare luogo a sql injection...)

grazie
1.976 messaggi dal 27 luglio 2005
Contributi
salve,
codice comunque dinamico o stored procedure?
nel primo caso non ci sono ovviamente problemi, generi il comando e carichi gli opportuni parametri, mentre nel secondo caso il problema iniziale dipende dalla "profondita'" dei parametri... quanti ne "vuoi permettere"?? 5? 10? ...? perche'? :)
ed in tali condizioni le performance diminuiscono ulteriormente in quanto devi scontrarti con il problema di confronto, per ogni parametro possibile, simile a
WHERE ...
AND ( column LIKE @parameter OR @parameter IS NULL )
AND .......
che appesantisce ulteriormente il tutto degradando le prestazioni...
in ogni caso sei fortemente invitato a leggere l'articolo che l'amico Erland Sommarskog ha pubblicato in proposito presso http://www.sommarskog.se/dyn-search.html
saluti

Andrea Montanari
http://www.hotelsole.com - http://www.hotelsole.com/asql/index.php
42 messaggi dal 13 settembre 2007
Nel caso volessi usare una stored, per chiarirti un po le idee ti posto un mini esempio :
declare @param as varchar(50)
set @param  = 'pp'
declare  @ta table(valore varchar(500))
insert into @ta values('pippo')
insert into @ta values('pluto')
insert into @ta values('paperino')

select  *
from  @ta
where  valore like '%' + @param + '%'


La sintassi è la seguente:
valore like '%' + @param + '%'


Come si diceva prima, il LIKE è abbastanza pesante, e se effettui paragoni su più parametri, ancora peggio...
Non riesci proprio ad utilizzare una alternativa?

Ciao
290 messaggi dal 08 luglio 2008
non uso stored ma una stringa sql usando i sql parameter come parametri. E proprio qui non riesco a capire una cosa.

Se il l'utente cerca "bicchieri plastica" io vorrei creare una sql del genere:

select * from prodotti where nome like '%bicchieri%' and nome like 'plastica'

io con i sql parameter come posso fare?

dovrei creare del sqlparameter dinamici cioe:

- ricevo la stringa di ricerca
- splitto per lo spazio
- per ogni elemento trovato dopo lo split creo un sqlparameter per ognuno
- aggancio i nuovi sqlparameter all'oggetto command
- lancio la query

come posso fare per aggiungere dinamicamente tanti sqlparameter quanti sono gli elementi trovati nella stringa di ricerca?

grazie

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.