193 messaggi dal 05 settembre 2001
Ho già proposto questa discussione nell'area database con scarsi risultati. Guardiamo se qui sarò più fortunato....
Ho creato un motore di ricerca con questa sql:

SELECT Forum.*, Reply.*, Topics.*
FROM (Forum LEFT JOIN Topics ON Forum.Forum_ID = Topics.Forum_id) LEFT JOIN Reply ON Topics.Topic_ID = Reply.Topic_ID
WHERE (((Topics.T_subject) Like [X])) OR (((Topics.T_Message) Like [X])) OR (((Forum.F_Description) Like [X])) OR (((Reply.R_Message) Like [X]))

dove x è la parola da ricercare. Il problema è che i risultati spesso si duplicano. Per evitarlo dovrei fare in modo che i campi con lo stesso Reply.topic_ID vengano estratti un'unica volta.
Esiste qualche comando SQL da aggiungere per fare questo? Se possibile vorrei trovare una soluzione solo modificando il codice SQL e senza dover usare ASP per non complicarmi troppo la vita (in altre parole vorrei evitare di dover riscriveere tutto il codice). Grazie



153 messaggi dal 20 aprile 2001
Per rimuovere i valori duplicati di solito si fa

<b>SELECT DISTINCT id FROM ...</b>

mentre per rimuovere i records duplicati si fa

<b>SELECT DISTINCTROW ...</b>

funzionerà nel tuo caso?

HD
____________
Posso indicarti la strada, ma poi devi seguirla da te.

Modificato - HelpDesk - 30 Set 2001 01:12:28

HD
____________
Posso indicarti la strada, ma poi devi seguirla da te.
193 messaggi dal 05 settembre 2001
Ho provato ad usare SELECT DISTINCTROW ma senza risultati, anche perchè i records non sono proprio duplicati.
Forse così mi spiego meglio: il motore di ricerca è per un Forum che ho trovato su internet.
Il problema è che se un messaggio nel Forum ha 12 risposte e la parola ricercata è nell'oggetto del messaggio (che viene deciso con il primo messaggio e rimane uguale per tutte le risposte), allora il motore mi restituisce 12 link identici, uno per ogni risposta.






902 messaggi dal 19 aprile 2001
immagino che ci sia qualche condizione che evidenzia il messaggio principale.
Aggiungila come criterio e ti dovrebbe tirare fuori solo i msg principali. Altrimenti il risultato che ti da è chiaramente corretto..


 Traspi.net
Da Torino al mondo Internet il magazine di cultura, creatività e informazione.
www.traspi.net
Mauro Tortone
webmaster@traspi.net

Traspi.net
Da Torino al mondo Internet il magazine di cultura, creatività e informazione.
www.traspi.net
Mauro Tortone
webmaster@traspi.net
193 messaggi dal 05 settembre 2001
Puoi farmi un esempio. Nel mio database le risposte sono su una tabella differente rispetto ai messaggi principali



Modificato - s_dimaio - 30 Set 2001 22:44:10
499 messaggi dal 14 luglio 2001
Oppure puoi utilizzare il seguente comando:

SELECT MIN(Topic_ID)..... ecc.. ec...

Topic_ID è l'id del messaggio, sul tuo db dovrebbe essere Topics.Topic_ID

dove ti cerca l'ID più basso del Topic, ciè il primo, in questo modo fa una selezione per solo per la/le parole chiave e viene selezionato solo il primo valore immesso..

ciao

enzo
www.dnetware.it


Modificato - conidi - 30 Set 2001 22:49:11

enzo
www.dnetware.it
193 messaggi dal 05 settembre 2001
Ho scritto la SQL in questo modo:
SELECT MIN (Topics.Topic_ID)
FROM (Forum LEFT JOIN Topics ON Forum ...

ma il risulato è un numero e non una serie di record (e infatti il motore non funziona). Vi scrivo anche il codice ASP che ho utilizzato per costruire la SQL:

Dim keywords

keywords = trim(search)

strSQL = "SELECT Forum.*, Reply.*, Topics.* FROM (Forum LEFT JOIN Topics ON Forum.Forum_ID = Topics.Forum_id) LEFT JOIN Reply ON Topics.Topic_ID = Reply.Topic_ID"

arrayParole=split(keywords," ",3)

Istringa = "((Topics.T_subject LIKE '%" & arrayParole(0) & "%'OR Topics.T_Message LIKE '%" & arrayParole(0) & "%' OR Reply.R_Message LIKE '%" & arrayParole(0) & "%')"
If Ubound(Arrayparole)&gt;0 then
Istringa = Istringa & "OR (Topics.T_subject LIKE '%" & arrayParole(1) & "%'OR Topics.T_Message LIKE '%" & arrayParole(1) & "%' OR Reply.R_Message LIKE '%" & arrayParole(1) & "%')"
If Ubound(Arrayparole)&gt;1 then
Istringa = Istringa & "OR (Topics.T_subject LIKE '%" & arrayParole(2) & "%'OR Topics.T_Message LIKE '%" & arrayParole(2) & "%' OR Reply.R_Message LIKE '%" & arrayParole(2) & "%'))"
Else
Istringa = Istringa &")"
End if
Else
Istringa = Istringa & ")"
End if
strSQL = strSQL & " WHERE "&Istringa

Pensandoci potrei risolvere il problema anche se riuscissi a trovare il modo di mantenere in questi termini la ricerca, ma visualizzando solo i link al messaggio principale. Avete qualche idea da propormi?

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.