Hi,
das sollte weiter helfen.
MariaDB [bernd]> DESCRIBE artikel;
+-------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+------------------+------+-----+---------+----------------+
| a_id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| bezeichnung | varchar(64) | YES | | NULL | |
+-------------+------------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
MariaDB [bernd]> DESCRIBE `art_preise`;
+------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------------+------+-----+---------+----------------+
| id | int(11) unsigned | NO | PRI | NULL | auto_increment |
| artikel | int(11) | YES | | NULL | |
| gueltig_ab | date | YES | | NULL | |
| preis | decimal(11,5) | YES | | NULL | |
+------------+------------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)
MariaDB [bernd]> select * from artikel;
+------+-------------------+
| a_id | bezeichnung |
+------+-------------------+
| 4711 | koelsch wasser |
| 4712 | besseres wasser |
| 4713 | sehr gutes wasser |
| 4714 | spitzenwasser |
+------+-------------------+
4 rows in set (0.00 sec)
MariaDB [bernd]> select * from art_preise;
+----+---------+------------+---------+
| id | artikel | gueltig_ab | preis |
+----+---------+------------+---------+
| 1 | 4711 | 2010-01-01 | 3.69000 |
| 2 | 4711 | 2010-01-01 | 3.69000 |
| 3 | 4712 | 2009-02-01 | 3.70000 |
| 4 | 4712 | 2009-12-12 | 3.85000 |
| 5 | 4714 | 2012-12-05 | 5.60000 |
| 6 | 4714 | 2014-06-12 | 7.95000 |
+----+---------+------------+---------+
6 rows in set (0.00 sec)
MariaDB [bernd]>
Lösung 1:
Ergibt alle Artikel, auch die ohne Preise:
MariaDB [bernd]> SELECT art.a_id AS Artikelnummer,
-> art.bezeichnung AS Bezeichnung,
-> ap.gueltig_ab AS Preis_ab,
-> ap.preis AS Preis
-> FROM artikel art
-> LEFT JOIN art_preise ap ON art.a_id = ap.artikel AND gueltig_ab <= NOW()
-> GROUP BY artikel
-> ORDER BY art.`a_id`, gueltig_ab ASC;
+---------------+-------------------+------------+---------+
| Artikelnummer | Bezeichnung | Preis_ab | Preis |
+---------------+-------------------+------------+---------+
| 4711 | koelsch wasser | 2010-01-01 | 3.69000 |
| 4712 | besseres wasser | 2009-02-01 | 3.70000 |
| 4713 | sehr gutes wasser | NULL | NULL |
| 4714 | spitzenwasser | 2012-12-05 | 5.60000 |
+---------------+-------------------+------------+---------+
4 rows in set (0.00 sec)
Lösung 2:
und bei diese werden die Artikel ohne Preise unterdrückt
MariaDB [bernd]> SELECT art.a_id AS Artikelnummer,
-> art.bezeichnung AS Bezeichnung,
-> ap.gueltig_ab AS Preis_ab,
-> ap.preis AS Preis
-> FROM artikel art
-> LEFT JOIN art_preise ap ON art.a_id = ap.artikel
-> WHERE gueltig_ab <= NOW()
-> GROUP BY artikel
-> ORDER BY art.`a_id`, gueltig_ab ASC;
+---------------+-----------------+------------+---------+
| Artikelnummer | Bezeichnung | Preis_ab | Preis |
+---------------+-----------------+------------+---------+
| 4711 | koelsch wasser | 2010-01-01 | 3.69000 |
| 4712 | besseres wasser | 2009-02-01 | 3.70000 |
| 4714 | spitzenwasser | 2012-12-05 | 5.60000 |
+---------------+-----------------+------------+---------+
3 rows in set (0.00 sec)
Bei beiden Lösungen kann man auch Preise in der Zukunft eingeben.
Diese werden aber erst angezeigt wenn das Datum erreicht ist.
Gruss
Bernd