Re: [postgresql-it] hit di ricerca

  • From: Daniele Varrazzo <piro@xxxxxxxxxxx>
  • To: postgresql-it <postgresql-it@xxxxxxxxxxxxx>
  • Date: Wed, 10 Jun 2009 10:43:44 +0200

On Wed, 10 Jun 2009 08:58:01 +0200, Luca Ferrari <fluca1978@xxxxxxxxxxx>
wrote:

Ciao a tutti,
ho bisogno di mantenere le informazioni circa le hit di ricerca di una 
anagrafica articoli, quindi diciamo che la mia tabella ha i campi
(id_elemento, hit)
dove il primo rappresenta la chiave e il secondo il contatore di quando 
l'elemento risulta da una ricerca. Attualmente io ho implementato la
logica
di 
aggiornamento dell'hit nel programma, e quindi prima faccio la mia
ricerca 
(SELECT....) costruita dinamicamente e poi faccio un UPDATE su tutta la
lista 
degli id_elemento che mi sono risultati. Mi domandavao però se esiste un
modo 
per fare la cosa via database direttamente. Inizialmente avevo pensato ad
una 
rule, ma il fatto è che i dati di un elemento potrebbero essere estratti
anche 
per la semplice visualizzazione di anagrafica e non per una ricerca, e io

voglio memorizzare solo l'hit della ricerca. Quindi mi era venuta in
mente
di 
fare una stored procedure, ma mi domandavo se esistesse un metodo piu' 
elegante per farlo.
Qualche idea o link?

Potresti usare qualcosa tipo (untested)

    UPDATE hit_ricerca
    SET hit = hit + 1

    FROM anagrafica

    -- puoi tirarti dentro altre tabelle mettendole in join...
    JOIN altra_tabella ON altra_tabella.emeneto_id = anagrafica.id

    -- ...ma il join tra hit e anagrafica devi farlo nel WHERE
    WHERE hit_ricerca.id_elemento = anagrafica.id

    -- campi di ricerca
    AND anagrafica.campo1 = ?
    AND altra_tabella.campo2 = ? 
    AND ... -- altri filtri

    RETURNING -- campi da restituire
        anagrafica.id,
        anagrafica.descrizione,
        altra_tabella.campo2,
        ... -- altri campi da restituire

INSERT...RETURNING è disponibile da PG 8.3.

Potresti usare una rule solo per assicurarti di creare un hit_ricerca
inizializzato a 0 per ogni record di anagrafica che aggiungi (e un
constraint ON DELETE CASCADE per sbarazzartene).

-- 
Daniele Varrazzo - Develer S.r.l. 
http://www.develer.com

Other related posts:

  • » Re: [postgresql-it] hit di ricerca - Daniele Varrazzo