Gå til innhold

Anbefalte innlegg

Jeg har satt opp syslog-ng på nettverket hjemme (div linuxmaskiner), moser all loggingen inn i postgres og henter ut info vha apache og mod_perl. Jeg har satt opp så jeg kan hente entrier for alle eller en bestemt maskin og for priority >= en gitt verdi. So far so good.. (Legger ut systemet på nettet når jeg har det litt mer ferdig i fall andre er interesserte)

 

Men, jeg vil også kunne vise logging for en eller flere 'facilities', da vi jeg bruke en spørring som fx

 

select <felter> from tabell where facility in ('mail','kern','auth')

 

Noe som vil funke er jo

# @facilities er en array som inneholder de valgte 'fasilitetene' antar minst en valgt
$select="select <felter> from tabell where facility in (?".",?"x$#facilities-1.")";
$qh=$dbh->prepare($select);
$qh->execute(@facilities);

 

Men finnes det noe alternativ til å bygge opp sql-strengen for hver spørring?

 

M.

 

edit, jøss innlegg 200 :cool:

Endret av mysjkin
Lenke til kommentar
Videoannonse
Annonse
  • 1 måned senere...

Hvis du er allergisk mot prepare() kan du minske antall ganger de kjøres på ved å ta vare på qh'er i en hash. Når det er fire elementer i @facilities og du kjørt for fire tidligere også, så gjenbruk prepare()-resultatet fra den gang:

 

$select="select ... from tabell where facility in (?".",?"x$#facilities-1.")";
$qh{@facilities} ||= $dbh->prepare($select);
$qh{@facilities}->execute(@facilities);

 

Eller hvis du er 100% allergisk, og det er en max-grense på f.eks. 10 stk i @facilities så kan du:

 

#--En gang
$max=10;
$select="select ... from tabell where facility in (?".",?"x$max-1.")";
$qh=$dbh->prepare($select);
.
.
.
#--Flere ganger, antar her ¤ er et tegn/kode som aldri opptrer
$qh->execute(@facilities,map"¤",@facilities+1..$max);

Lenke til kommentar

Nøh, allergisk mot prepare er jeg absolutt ikke, men dersom den er resirkulerbar, er det jo greiest å bruke en prepared query på nytt...

 

Tenkte ikke på å cache en prepared query i det opprinnelige spørsmålet mitt, lurte mer på om det var noen mulighet til å mose en array eller arrayref inn i en ?.

 

takk for tipset, skal putte inn en orcish manouver noen velvalgte steder.

 

M.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...