Page 1 of 1
Select für Bestellung und Bestellpositionen
Posted: 2006-12-20 16:02
by marquinhos
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.
Re: Select für Bestellung und Bestellpositionen
Posted: 2006-12-20 17:08
by outofbound
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?
Re: Select für Bestellung und Bestellpositionen
Posted: 2006-12-21 09:09
by marquinhos
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 !
:)
Re: Select für Bestellung und Bestellpositionen
Posted: 2006-12-21 09:18
by flo
Und dann fängt es langsam an, interessant zu werden, welche Datenbank in welcher Version das ist ...
flo.
Re: Select für Bestellung und Bestellpositionen
Posted: 2006-12-21 09:23
by marquinhos
MySQL in der Version 3 XXX ... also kein Orcale, IBM DB, oder ähnliches.
Re: Select für Bestellung und Bestellpositionen
Posted: 2006-12-21 09:40
by flo
Mach das in der Applikation - auch wenn das ein paar Abfragen mehr sind - 3.x kann wenig.
flo.
Re: Select für Bestellung und Bestellpositionen
Posted: 2006-12-21 09:53
by marquinhos
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 ???
Re: Select für Bestellung und Bestellpositionen
Posted: 2006-12-21 10:13
by flo
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.
Re: Select für Bestellung und Bestellpositionen
Posted: 2006-12-21 10:25
by marquinhos
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.
Re: Select für Bestellung und Bestellpositionen
Posted: 2006-12-21 10:54
by flo
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.