mehrfach Ausgabe eines Datensatzes mit einem select

mehrfach Ausgabe eines Datensatzes mit einem select

am 15.02.2007 09:43:21 von Marc Wiemers

Hallo,

ich habe vielleicht ein skuriles Problem. Es gibt eine Adressdatenbank.
Diese wird genutzt um Adressaufkleber zu drucken. Es gibt Adressen die
mehrfach bei einer Aussendung beschickt werden müssen. Die Anzahl steht in
einem extra Feld. Jetzt möchte ich mit einem select die Abfrage mit den
mehreren Aufkleber für eine Adresse mache. Leider stehe ich so auf dem
Schlauch dass ich nicht weiß wie.
Habt ihr eine Idee?

Danke

Marc

Re: mehrfach Ausgabe eines Datensatzes mit einem select

am 15.02.2007 10:02:33 von Thomas Rachel

Marc Wiemers wrote:

> ich habe vielleicht ein skuriles Problem. Es gibt eine Adressdatenbank.
> Diese wird genutzt um Adressaufkleber zu drucken. Es gibt Adressen die
> mehrfach bei einer Aussendung beschickt werden müssen. Die Anzahl steht in
> einem extra Feld. Jetzt möchte ich mit einem select die Abfrage mit den
> mehreren Aufkleber für eine Adresse mache. Leider stehe ich so auf dem
> Schlauch dass ich nicht weiß wie.
> Habt ihr eine Idee?

Naja, direkt kannst Du die Adressen sowieso nicht drucken, da muß ja auf
jeden Fall noch eine Logik zwischen Datenbank und Drucker stehen, die für
die von Dir gewünschte Replikation wohl am geeignetsten ist.

Alternativ wäre sowas wie

CREATE TEMPORARY TABLE mehrfach(dummy CHAR(0));
INSERT INTO DUMMY VALUES (''),(''),('');

SELECT ... FROM JOIN mehrfach

denkbar, das dann jede Zeile n-fach ausgibt mit n=Anzahl der Zeilen in
Tabelle mehrfach.

Aber wie gesagt, das willst Du glaub ich eher in der Anwendung realisieren.


Thomas
--
Man kann nicht vorsichtig genug sein. Vielleicht müssen wir eine zweite
Sprache
entwickeln. Die erste ist ja bald von Markeninhabern komplett belegt.
(Uwe Becker, de.soc.recht.misc, 2000-10-28)

Re: mehrfach Ausgabe eines Datensatzes mit einem select

am 15.02.2007 10:25:18 von Christian Kirsch

Am 15.02.2007 10:02 schrieb Thomas Rachel:
> Marc Wiemers wrote:
>
>> ich habe vielleicht ein skuriles Problem. Es gibt eine Adressdatenbank.
>> Diese wird genutzt um Adressaufkleber zu drucken. Es gibt Adressen die
>> mehrfach bei einer Aussendung beschickt werden müssen. Die Anzahl steht in
>> einem extra Feld. Jetzt möchte ich mit einem select die Abfrage mit den
>> mehreren Aufkleber für eine Adresse mache. Leider stehe ich so auf dem
>> Schlauch dass ich nicht weiß wie.
>> Habt ihr eine Idee?
>
> Naja, direkt kannst Du die Adressen sowieso nicht drucken, da muß ja auf
> jeden Fall noch eine Logik zwischen Datenbank und Drucker stehen, die für
> die von Dir gewünschte Replikation wohl am geeignetsten ist.
>
> Alternativ wäre sowas wie
>
> CREATE TEMPORARY TABLE mehrfach(dummy CHAR(0));
> INSERT INTO DUMMY VALUES (''),(''),('');
>
> SELECT ... FROM JOIN mehrfach
>
> denkbar, das dann jede Zeile n-fach ausgibt mit n=Anzahl der Zeilen in
> Tabelle mehrfach.
>
> Aber wie gesagt, das willst Du glaub ich eher in der Anwendung realisieren.
>

Vielleicht täte es auch eine Stored Procedure.

Re: mehrfach Ausgabe eines Datensatzes mit einem select

am 15.02.2007 10:39:07 von Daniel Fischer

Christian Kirsch!

> Vielleicht täte es auch eine Stored Procedure.

Klar, *tun* wird sie es schon:

create table addr (name varchar(20), count int);
....

delimiter //
create procedure bleh()
begin
declare max int;
create temporary table tempjoin (count int);
select max(count) from addr into max;
while max > 0 do
insert into tempjoin values (max);
set max = max - 1;
end while;
select * from addr,tempjoin where addr.count >= tempjoin.count order by name;
drop temporary table tempjoin;
end//

Aber ist das wirklich was, was mit aller Gewalt auf dem DB-Server gemacht
werden muss? Eigentlich ist das der typische Fall von Arbeit, die die
Anwendung erledigen sollte...


Gruß
Daniel

Re: mehrfach Ausgabe eines Datensatzes mit einem select

am 15.02.2007 10:44:33 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: mehrfach Ausgabe eines Datensatzes mit einem select

am 15.02.2007 11:07:19 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: mehrfach Ausgabe eines Datensatzes mit einem select

am 15.02.2007 11:13:45 von Daniel Fischer

Andreas Kretschmer!

> wenn man es so macht wie Du, so mit extra temp. Tabellen und so, damit
> es richtig teuer wird, dann ist die Frage von Dir durchaus berechtigt...

Meine temporäre Tabelle ist nicht sehr teuer, solange nicht eine Adresse
millionenfach beliefert werden soll. Sie ist auch nicht notwendig, ich
könnte in der Schleife einfach direkt select ausführen.

Der Punkt ist einfach, dass die Vorgehensweise die über die Verbindung
zwischen Server und Client geschickte Datenmenge vervielfacht, und das ist
Unfug.


Gruß
Daniel

Re: mehrfach Ausgabe eines Datensatzes mit einem select

am 15.02.2007 11:36:25 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: mehrfach Ausgabe eines Datensatzes mit einem select

am 15.02.2007 12:10:58 von Werner Bauer

Marc Wiemers schrieb:
> Jetzt möchte ich mit einem select die Abfrage mit den
> mehreren Aufkleber für eine Adresse mache ...

In der dummy-Tabelle müssen immer ausreichend viele Einträge sein.



mysql> select * from adressen;
+------------+---------+
| adresse | wie_oft |
+------------+---------+
| lummerland | 3 |
| burgenland | 1 |
+------------+---------+
2 rows in set (0.00 sec)

mysql> select * from dummy;
+-----+
| num |
+-----+
| 1 |
| 2 |
| 3 |
| 4 |
+-----+
4 rows in set (0.00 sec)

mysql> select a.*, d.* from adressen a
-> join dummy d
-> where d.num<=3Da.wie_oft;
+------------+---------+-----+
| adresse | wie_oft | num |
+------------+---------+-----+
| lummerland | 3 | 1 |
| lummerland | 3 | 2 |
| lummerland | 3 | 3 |
| burgenland | 1 | 1 |
+------------+---------+-----+
4 rows in set (0.00 sec)