Select für Bestellung und Bestellpositionen

MySQL, PostgreSQL, SQLite
marquinhos
Posts: 53
Joined: 2004-01-12 17:55
Location: Fellbach

Select für Bestellung und Bestellpositionen

Post by marquinhos » 2006-12-20 16:02

Hallo Ihr,

ich möchte in einem Shop einen eigenen Select bauen, welcher mir ausgibt, in welcher Bestellung der Artikel A oder B oder auch C vorhanden ist.

Zu jeden Bestellung gibt es 1:n Bestellpositionen

Tabelle 1
Bestellung

mit

- ID
- Kunden_ID
- Rechnungsbetrag
- Datum

Tabelle 2
Bestellpositionen

- ID
- Bestell_id
- Artikel_id
- Menge

Herauskommen soll dann eine Tabelle, die so aussehen sollte ...

- Bestell_id
- Kunden_id
- Rechnungsbetrag
- Datum
- Menge Artikel A
- Menge Artikel B
- Menge Artikel C

Wie bekomme ich das hin ???

Inner Join und Left Outer haben alle gestreikt ... eine Idee ???

Danke.

outofbound
Posts: 470
Joined: 2002-05-14 13:02
Location: Karlsruhe City

Re: Select für Bestellung und Bestellpositionen

Post by outofbound » 2006-12-20 17:08

select distinct from bestellung b, bestellposition p where b.id = p.bestell_id and
((p.artikel_id = a) or (p.artikel_id = b) or (p.artikel_id = c))

sowas?

marquinhos
Posts: 53
Joined: 2004-01-12 17:55
Location: Fellbach

Re: Select für Bestellung und Bestellpositionen

Post by marquinhos » 2006-12-21 09:09

Hallo OutOfBound,

damit haben wir aber nicht die Daten (Menge A, B, C) aus den Bestellpositionen im Ergebnis, sondern nur die Bestellungen, welche entweder Artikel A, B oder C enthalten.

Es fehlen die Mengen A, B, C.

Thanks !

:)

flo
Posts: 2223
Joined: 2002-07-28 13:02
Location: Berlin

Re: Select für Bestellung und Bestellpositionen

Post by flo » 2006-12-21 09:18

Und dann fängt es langsam an, interessant zu werden, welche Datenbank in welcher Version das ist ...

flo.

marquinhos
Posts: 53
Joined: 2004-01-12 17:55
Location: Fellbach

Re: Select für Bestellung und Bestellpositionen

Post by marquinhos » 2006-12-21 09:23

MySQL in der Version 3 XXX ... also kein Orcale, IBM DB, oder ähnliches.

flo
Posts: 2223
Joined: 2002-07-28 13:02
Location: Berlin

Re: Select für Bestellung und Bestellpositionen

Post by flo » 2006-12-21 09:40

Mach das in der Applikation - auch wenn das ein paar Abfragen mehr sind - 3.x kann wenig.

flo.

marquinhos
Posts: 53
Joined: 2004-01-12 17:55
Location: Fellbach

Re: Select für Bestellung und Bestellpositionen

Post by marquinhos » 2006-12-21 09:53

Ja, wir werden jetzt drei Abfragen machen und uns dann in drei schleifen ein array von Bestellungen zusammenbauen, welche jeweils die mengen der Artikel A, B und C enthalten ...

Aber der Select hätte mich schon interessiert ...

Ginge es mit MySQL 5 ???

flo
Posts: 2223
Joined: 2002-07-28 13:02
Location: Berlin

Re: Select für Bestellung und Bestellpositionen

Post by flo » 2006-12-21 10:13

Code: Select all

mysql> select test_artikel.*, test_bestellung.* from test_artikel 
LEFT OUTER JOIN test_bestellung on (test_bestellung.bestid=test_artikel.bestell_id);

+-------+------------+-------+-------+-------------+--------+------+--------+------------+
| artid | bestell_id | menge | artnr | artname     | bestid | cid  | betrag | datum      |
+-------+------------+-------+-------+-------------+--------+------+--------+------------+
|     1 |          1 |     4 | 32767 | Struempfe 2 |      1 |    1 | 99,98  | 20.12.2006 | 
|     2 |          1 |     2 | 32767 | Struempfe 3 |      1 |    1 | 99,98  | 20.12.2006 | 
+-------+------------+-------+-------+-------------+--------+------+--------+------------+
2 rows in set (0.00 sec)
Das ist schon mal der Select - Dein Vorschlag geht schlicht und ergreifend nciht, weil die Anzahl der Bestellungen pro Artikel variabel sein sollte und Du damit in einer Query Rows in Cols verwandeln müsstest - Wenn das ginge, wäre es mir neu.

Außerdem: Das Datenbanklayout ist sch... eine 1:n Verknüpfung zwischen Bestellungen und Artikeln zu machen, ist keine gute Idee, zusätzliche Tabellen kosten auch nicht mehr.

In einen Artikeldatensatz gehören schlicht und ergreifend keine Bestellungsdaten, das würde ich mit Kreuztabellen bzw. n:n-Verknüpfungen lösen.

flo.

marquinhos
Posts: 53
Joined: 2004-01-12 17:55
Location: Fellbach

Re: Select für Bestellung und Bestellpositionen

Post by marquinhos » 2006-12-21 10:25

Nene ... wir haben ...

- Bestellungen
- Bestellpositionen
und
- Artikel

Eine Bestellung besteht aus "n" Bestellpositionen.

Die Artikel kann man auswählen und daraus generieren wir dann Bestellpositionen.

D.h. die Bestellpositionen sind quasi der Warenkorb.

flo
Posts: 2223
Joined: 2002-07-28 13:02
Location: Berlin

Re: Select für Bestellung und Bestellpositionen

Post by flo » 2006-12-21 10:54

Dann poste leserlich, nutze die Code-Tags und poste vor allem die Datenbankstruktur - das ist sonst kein Spaß.

Der OUTER JOIN funktioniert aber auch schon mit MySQL3 - ich bezweifle nur, daß das Handbuch noch online steht.

flo.