Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    Occorrenze in un database.

    In un database di valori alfanumerici devo cercare la riga con il maggior numero di occorrenze di una variabile.

    Esempio

    ho la variabile (che mi proviene da un form)

    prima

    nel database devo cercare la riga che ha il maggior numero di occorrenze delle lettere:

    p
    r
    i
    m
    a

    Siete in grado di aiutarmi?

  2. #2
    non ho capito, fa' un esempio pratico, grazie

  3. #3
    Esempio pratico

    Database

    Pareggio
    Perri
    Carro
    Mare

    Parola che mi arriva dal form: PORTA

    Nella prima parola ci sono:

    una p, una r, una o = 3 occorrenze

    Nella seconda parola ci sono

    una p, due r, = 3 occorrenze

    Nella terza parola ci sono

    una a, due r, una o = 4 occorrenze

    Nella quarta:

    una a, una r = 2 occorrenze


    A me dovrebbe uscire qundi la parola

    Carro

    che ha + occorrenze di tutti.

    Spero di essere stato chiaro.

  4. #4
    Innanzitutto presumo che tu debba splittare la string che ti arriva dal FORM.
    Se ti arriva la parola PROVA, tu devi controllare, lettera per lettera, il relativo campo del database.

    Quindi:

    strCorrispondenza=0

    record 1: torino

    prima lettera del form: P --> no corrispondenza
    seconda lettera del form: R -->ok --> strCorrispondenza = strCorrispondenza+1
    terza lettera del form: O --> ok --> strCorrispondenza = strCorrispondenza+1

    etc etc etc

    E' piu o meno quello che intendevi tu?

  5. #5
    Originariamente inviato da alemux
    Innanzitutto presumo che tu debba splittare la string che ti arriva dal FORM.
    Se ti arriva la parola PROVA, tu devi controllare, lettera per lettera, il relativo campo del database.

    Quindi:

    strCorrispondenza=0

    record 1: torino

    prima lettera del form: P --> no corrispondenza
    seconda lettera del form: R -->ok --> strCorrispondenza = strCorrispondenza+1
    terza lettera del form: O --> ok --> strCorrispondenza = strCorrispondenza+1

    etc etc etc

    E' piu o meno quello che intendevi tu?
    Esatto. Devo prendere nel db la riga (o le righe) che ha lo strCorrispondenza + alto alla fine dei calcoli.

  6. #6
    Di quale database stiamo parlando?
    E di quanti record è composta la tabella all'incirca (100, 1000, 1,000,000?)?

    Al momento il problema più grosso lo vedo sul conteggio delle doppie (ex r in Perri), tutto il resto lo potresti gestire con delle like, iif/case, instr/substr nella composizione della query)
    xxx

  7. #7
    Si, anche la soluzione di Alethesnake è perfetta.

    Altrimenti potresti anche fare una cosa:

    se la parola dal FORM è PROVA, puoi cercare nel DB la ricorrenza di:

    1) PROVA
    2) PROV
    3) PRO
    4) PR
    5) P

    assegnando ad ogni step un punteggio decrescente.
    Se c'è PROVA, allora vale 5, se c'è PROV vale 4, etc....
    Ergo, ti fai tu un algoritmo bing-like...

  8. #8
    Nel database non ci sono ricorrenze nella singola riga.

    Però se invece di PROV ci fosse POVA oppure PRVA, dovrebbe contare 4 lo stesso.

    I records sono pochi (direi nemmeno 1000).

    Allora il problema è:

    Ho la parola PROVA. Devo tirare fuori tutti i casi con il maggior numero di ricorrenze dal database. Non ci sono ricorrenze doppie in ogni riga.

    Che istruzione devo usare?

  9. #9
    Ti faccio un esempio su una tabella di prova con campo che si chiama testo, su database access. Essendo pochi record non dovresti aver problemi, questa ovviamente è solo un'idea.
    Potresti costruirti una query simile a partire dalla parola in input, il mio è un esempio sulla parola remo:

    codice:
    SELECT 
    testo,
    len(testo) - len(replace(testo, 'r', ''))
    +
    len(testo) - len(replace(testo, 'e', ''))
    +
    len(testo) - len(replace(testo, 'm', ''))
    +
    len(testo) - len(replace(testo, 'o', ''))
    
    as punteggio
    
    FROM Tabella1
    
    where
    testo like '%r%'
    or
    testo like '%e%'
    or
    testo like '%m%'
    or
    testo like '%o%'
    
    order by 2 desc
    ;
    xxx

  10. #10
    La tua idea mi pare abbastanza simile alla mia.

    --- codice ---
    do while(lungcarte1>0)
    dim primocarattere
    lungcarte1 = lungcarte1-1
    primocarattere=left(stringasenzaprimocarattere, 1)
    stringasenzaprimocarattere=right(stringasenzaprimo carattere, len(stringasenzaprimocarattere) -1)
    loop
    --- fine codice ---

    La parola viene da un form ed è quindi di lunghezza (max 8) variabile.
    Questo ciclo toglie le lettere una alla volta fino a che la lunghezza non è pari a 0.
    programmavo di mettere ogni volta il primocarattere in una variabile vuota con l'istruzione

    ---codice ---
    if a=' ' then
    a = primo carattere
    ' qui metto l'istruzione che cerca le occorrenze di a
    end if

    if b=' ' then
    b = primo carattere
    ' qui metto l'istruzione che cerca le occorrenze di b
    end if
    --- fine codice ---

    e così via per 8 volte (lunghezza massima della stringa).

    poi in fondo faccio la somma, svuoto le variabili, memorizzo il risultato della somma in una variabile e gli dico di eseguire le istruzioni di inserimento in tabella.

    Poi esamina il secondo record della tabella. Faccio un confronto con il risultato precedente e se le occorrenze sono >= il risultato precedente aggiunge un'altra riga alla tabella che si sta creando.

    E così via fino ad EOF.

    Poi stampo il risultato della tabella a video.

    Che ne dici?

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.