/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Returnere poster angivet i felt med et vie~
Fra : Mads Lie Jensen


Dato : 04-04-07 21:49

Hej

Bruger PostgreSQL 8.1.

Jeg har en tabel 'labels':

id int,
tekst varchar,
antal int

For hver post i tabellen angivet 'antal' hvor mange udskrifter af denne
post der skal bruges.

Desværre er min frontend (MS Access) ikke god til at lave et variabelt
antal udskrifter af hver post.

Kan man så evt. lave et view i postgresql, som returnerer aktuelle post
x antal gange, hvor x er angivet i 'antal'.

Så hvis tabellen indeholder følgende data:

Antal   Tekst
3      træer
2      buske
3      æbletræer

vil jeg få vist:

træer
træer
træer
buske
buske
æbletræer
æbletræer
æbletræer

Håber det var til at forstå ...
--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
Gartneriet - http://www.gartneriet.dk/

 
 
Michael Zedeler (04-04-2007)
Kommentar
Fra : Michael Zedeler


Dato : 04-04-07 22:44

Mads Lie Jensen skrev:
> Bruger PostgreSQL 8.1.
>
> Jeg har en tabel 'labels':
>
> id int,
> tekst varchar,
> antal int [klip]
>
> Så hvis tabellen indeholder følgende data:
>
> Antal   Tekst
> 3      træer
> 2      buske
> 3      æbletræer
>
> vil jeg få vist:
>
> træer
> træer
> træer
> buske
> buske
> æbletræer
> æbletræer
> æbletræer

Det er godt nok en af de underligste forespørgsler, jeg har set
efterlyst. Normalt klarer man jo netop den slags gentagelser i noget
kode udenfor databasen.

Jeg kan desværre ikke komme på en pæn løsning - det er højst usædvanligt
at ønske at få databasen til at fremstille redundant data på den måde.

Men jeg har da et hack...

Lav denne her tabel (kald den counters):

counter
-------
1
2
.
.
.
10 (skal være større end max(antal) fra din tabel)

SELECT id, tekst, antal, counter
FROM counters, labels
WHERE antal <= counter

Det er en hæslig konstruktion, men den virker. Jeg vil kraftigt anbefale
at du i stedet finder ud af at få den ende, der modtager data til selv
at generere dubletterne.

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at http://michael.zedeler.dk/

Michael Zedeler (04-04-2007)
Kommentar
Fra : Michael Zedeler


Dato : 04-04-07 22:51

Michael Zedeler skrev:
> Mads Lie Jensen skrev:
>> Bruger PostgreSQL 8.1.
>>
>> Jeg har en tabel 'labels':
>>
>> id int,
>> tekst varchar,
>> antal int [klip]
>>
>> Så hvis tabellen indeholder følgende data:
>>
>> Antal Tekst
>> 3 træer
>> 2 buske
>> 3 æbletræer
>>
>> vil jeg få vist:
>>
>> træer
>> træer
>> træer
>> buske
>> buske
>> æbletræer
>> æbletræer
>> æbletræer
>
> Det er godt nok en af de underligste forespørgsler, jeg har set
> efterlyst. Normalt klarer man jo netop den slags gentagelser i noget
> kode udenfor databasen.
>
> Jeg kan desværre ikke komme på en pæn løsning - det er højst usædvanligt
> at ønske at få databasen til at fremstille redundant data på den måde.
>
> Men jeg har da et hack...
>
> Lav denne her tabel (kald den counters):
>
> counter
> -------
> 1
> 2
> .
> .
> .
> 10 (skal være større end max(antal) fra din tabel)
>
> SELECT id, tekst, antal, counter
> FROM counters, labels
> WHERE antal <= counter

Hovsedasse der skal stå

WHERE counter <= antal

Mvh. Michael.
--
Which is more dangerous? TV guided missiles or TV guided families?
I am less likely to answer usenet postings by anonymous authors.
Visit my home page at http://michael.zedeler.dk/

Mads Lie Jensen (05-04-2007)
Kommentar
Fra : Mads Lie Jensen


Dato : 05-04-07 07:37

On Wed, 04 Apr 2007 23:43:52 +0200, Michael Zedeler <michael@zedeler.dk>
wrote:

>Det er godt nok en af de underligste forespørgsler, jeg har set
>efterlyst. Normalt klarer man jo netop den slags gentagelser i noget
>kode udenfor databasen.

Det gør jeg sådan set også nu - jeg har Access til at formattere en
label det antal gange der står i 'antal'. Det virker bare som vinden
blæser, jeg har brugt timevis på det og Access er ikke engang konsistent
i de fejl den laver. Nogle gange glemmer den en label, nogle gange laver
den et helt ark for meget osv.
For at det så ikke skal være løgn kan jeg nu ikke engang komme til at
ændre i den rapport jeg har designet til formålet - Access låser totalt
når jeg prøver.

Og jeg står ret desperat og skal have udskrevet en stak etiketter og har
ikke tid til at rode med det. Så må man jo finde en "nem" omend grim
løsning

>Men jeg har da et hack...
>
>Lav denne her tabel (kald den counters):
>
>counter
>-------
> 1
> 2
> .
> .
> .
> 10 (skal være større end max(antal) fra din tabel)
>
>SELECT id, tekst, antal, counter
> FROM counters, labels
> WHERE antal <= counter
>
>Det er en hæslig konstruktion, men den virker. Jeg vil kraftigt anbefale
>at du i stedet finder ud af at få den ende, der modtager data til selv
>at generere dubletterne.

Den kan formentlig bruges. Jeg forsøger, tak for hjælpen.
--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
Gartneriet - http://www.gartneriet.dk/

Mads Lie Jensen (06-04-2007)
Kommentar
Fra : Mads Lie Jensen


Dato : 06-04-07 19:49

On Wed, 04 Apr 2007 23:43:52 +0200, Michael Zedeler <michael@zedeler.dk>
wrote:

>Men jeg har da et hack...
>
>Lav denne her tabel (kald den counters):
>
>counter
>-------
> 1
> 2
> .
> .
> .
> 10 (skal være større end max(antal) fra din tabel)
>
>SELECT id, tekst, antal, counter
> FROM counters, labels
> WHERE antal <= counter
>
>Det er en hæslig konstruktion, men den virker. Jeg vil kraftigt anbefale

Jeg fik tid til at lege lidt med det - og kom frem til denne funktion:

CREATE OR REPLACE FUNCTION getLabels() RETURNS SETOF etiketter AS $$
DECLARE
   labels RECORD;
   
BEGIN
   FOR labels IN SELECT * FROM etiketter LOOP
      FOR i IN 1 .. labels.antal LOOP
         RETURN NEXT labels;
      END LOOP;
   END LOOP;
   RETURN;
END;
$$ LANGUAGE plpgsql;

Med den skal jeg ikke bekymre mig om at have poster nok i counters fra
dit forslag, men ifølge dokumentationen vil denne konstruktion være
endnu værre end din. Det er pt. til at leve med.
--
Mads Lie Jensen - mads@gartneriet.dk - ICQ #25478403
Gartneriet - http://www.gartneriet.dk/

Søg
Reklame
Statistik
Spørgsmål : 177579
Tips : 31968
Nyheder : 719565
Indlæg : 6409073
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste