Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 39
  1. #1

    ordinare i riusultati x rilevanza

    Ciao a tutti
    ho provato a fare ricerche nel forum e nel web ma non ho trovato niente che mi aiuti ad implementare questo codice che mi restituisce una o più parole cercando all'interno di un db in più campi.

    Vorrei che oltre a fornirmi i vari id li ordinasse anche per rilevanza di corrispondenza

    Ho trovato solo uno script x mysql ed io utilizzo invece access

    questa sono le query che ora utilizzo:

    min=3
    sql = "select * from data where description = '"& StrSearch &"'"
    ArrSearch = Split(strSearch)

    for each Word In ArrSearch
    word = trim(word)
    if len(word) > min then
    sql = sql & " OR description like'%" & word & "%'"
    sql = sql & " or keywords like'%" & word & "%'"
    sql = sql & " or title like'%" & word & "%'"
    sql = sql & " or url like'%" & word & "%'"
    sql = sql & " or testopag like'%" & word & "%'"
    end if
    Next
    Potete aiutarmi?
    www.telefoninook.com
    contenuti e risorse gratis per il tuo cellulare

  2. #2
    Che cos'è la "rilevanza di corrispondenza"?

  3. #3
    x meglio spiegarmi la possibilità di scrivere in ordine i risultati di una ricerca ordinati dall'id con maggiori elementi di corrispondenza a quello con minor elemnti di corrispondenza

    x esempio questo è uno script x Mysql con una soluzione x ottenere ciò:

    select
    ( if ( instr( titolo , ‘parola_uno‘) > 0 , 5 , 0 )
    + if ( instr( titolo , ‘parola_due‘ ) > 0 , 5 , 0 )
    + if ( instr( keywords, ‘parola_uno‘) ‘ ) > 0 , 3 , 0 )
    + if ( instr( keywords, ‘parola_due‘) ‘ ) > 0 , 3 , 0 )
    + if ( instr( descrizione, ‘parola_uno‘) ‘ ) > 0 , 1 , 0 )
    + if ( instr( descrizione, ‘parola_due’) ‘ ) > 0 , 1 , 0 )
    ) as relevance ,
    titolo ,
    descrizione ,
    keywords
    from nometabella
    where
    concat_ws(’ ‘ , titolo , descrizione , keywords) like ‘%parola_uno%’
    and concat_ws(’ ‘ , titolo , descrizione , keywords) like ‘%parola_due%’
    order by relevance desc

    ma che io non posso utilizzare poichè sono con access
    www.telefoninook.com
    contenuti e risorse gratis per il tuo cellulare

  4. #4
    con access devi usare IIF

  5. #5
    IIF invece di If e concat_ws?
    Io in più ho la necessità di implementare il mio codice dove il numero di parole da cercare è variabile mentre il codice che ho inserito e che lavora con Mysql è limitato a singole parole da cercare (parola_1, Parola_2)
    non so se sono stato chiaro
    www.telefoninook.com
    contenuti e risorse gratis per il tuo cellulare

  6. #6
    fa' un esempio concreto, grazie

  7. #7
    Eccomi:
    frase da cercare:
    fumetti in bianconero di Alan Ford

    il mio codice ora mi restituisce tutti gli id che contengono tutte o al meno una di queste parole ma in ordinati x id per cui il risulatato è

    id10 - bianconero Alan Ford
    id20 - fumetti
    id31 - Alan fumetti bianconero
    id44 - fumetti bianconero Alan Ford
    id51 - Ford
    id63 - fumetti Alan

    e invece a me piacerebbe che siano scritti così

    id44 - fumetti bianconero Alan Ford
    id11 - bianconero Alan Ford
    id63 - fumetti Alan
    id20 - fumetti
    id51 - Ford

    spero di essere stato più comprensibile
    www.telefoninook.com
    contenuti e risorse gratis per il tuo cellulare

  8. #8
    up up
    lo sò che avere una risposta a questo quesito è difficile...
    non vi è mai stata conclusione a quesiti simili su questo forum...
    ...ma chissà!!! :quote:
    www.telefoninook.com
    contenuti e risorse gratis per il tuo cellulare

  9. #9
    E' solo un'idea:

    codice:
    SELECT 
        (
        IIF(INSTR('parola1', tuoCampo), 1, 0) + 
        IIF(INSTR('parola2', tuoCampo), 1, 0) +
        IIF(INSTR('parola3', tuoCampo), 1, 0) 
        ) AS yourRanking, 
        altriCampi
    FROM 
        tuaTabella
    WHERE
        tuoCampo LIKE 'parola1' 
    OR
        tuoCampo LIKE 'parola2'
    OR
        tuoCampo LIKE 'parola3'
    ORDER BY
        1 DESC
    ovviamente sia il campo yourRanking che la clausola where devono essere creati dinamicamente.
    Le performance (in termini di velocità) se hai molti record potrebbero non essere entusiasmanti, prova.

    xxx

  10. #10
    ho fatto così

    SQL="select ("
    ArrSearch = Split(strSearch)
    for each Words In ArrSearch
    words = trim(words)

    sql = sql &" IF (INSTR(description,words)>0, 5, 0) + "
    sql = sql &" IF (INSTR(title,words)>0, 5, 0) + "
    sql = sql &" IF (INSTR(keywords,words)>0, 5, 0) "
    Next
    sql = sql &") AS Relevance"
    sql = sql &" from data where description = '"& StrSearch &"' OR testopag = '"& StrSearch &"'"
    ArrSearch = Split(strSearch)

    for each Word In ArrSearch
    word = trim(word)
    if len(word) > min then
    sql = sql & " OR description like '%" & word & "%'"
    sql = sql & " or keywords like '%" & word & "%'"
    sql = sql & " or title like '%" & word & "%'"
    sql = sql & " or url like '%" & word & "%'"
    sql = sql & " or testopag like '%" & word & "%'"

    end if

    Next
    sql = sql & " ORDER by Relevance DESC"
    Ma il Db mi ha riempito di parolacce.... VVoVe: VVoVe:
    www.telefoninook.com
    contenuti e risorse gratis per il tuo cellulare

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.