Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Nicht alle Daten anzeigen, abhängig von eine anderen Tabelle [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Nicht alle Daten anzeigen, abhängig von eine anderen Tabelle


 
MarcT
08-12-2005, 16:41 
 
Hi zusammen,

ich habe die folgenden zwei Tabellen:

1. Tabelle "artikel"[list=1]
Feld "nr"
Feld "name"
[/list=1]

2. Tabelle "artikelstatus"[list=1]
Feld "id" (auto_increment)
Feld "artikelnr" (Relation zu der 1. Tabelle)
Feld "datetime" (typ datetime)
Feld "lieferbar" (typ enum 'ja','nein')
[/list=1]

Die Tabelle "artikel" enthält nur wenige Artikel mit dessen Nummer und Beschreibung.

In der zweiten Tabelle steht der aktuelle und die älteren Status ob der Artikel lieferbar ist/war oder nicht. Zum Beispiel:

id art.nr datetime lieferbar
1 100 2005-11-20 12:00 ja
2 101 2005-11-20 12:00 ja
3 102 2005-11-20 12:00 ja
4 103 2005-11-20 12:00 ja
5 100 2005-11-21 12:00 nein
6 101 2005-11-21 12:00 nein
7 100 2005-11-22 12:00 ja
Man kann erkennen, dass nur ein einzige Artikel, nämlich 101 zur Zeit nicht lieferbar ist, alle anderen Artikel sind lieferbar (oder wieder lieferbar).

Die Liste die ich haben möchte sollte also folgendens rausspucken:
code:

art.nr name
101 artikelbezeichnung 101
Also nur die Artikel welche zum letzten Zeitpunkt nicht lieferbar sind. Kann man soetwas mit einer SQL-Abfrage bekommen?

Vielen Danke schon mal für eure Bemühungen!

Gruß, Marc

 
Wurzel
08-12-2005, 16:47 
 
einfach joinen (http://www.php-resource.de/forum/showthread.php?s=&threadid=28292) mit einer WHERE bedingung

 
MarcT
08-12-2005, 17:16 
 
Hallo Wurzel,
Original geschrieben von Wurzel
einfach joinen (http://www.php-resource.de/forum/showthread.php?s=&threadid=28292) mit einer WHERE bedingung
Danke für die schnelle Antwort.

MySQL ist für mich kein neues Thema und ich dachte am Anfang auch, dass es mit einem einfachen "WHERE" geht. Doch ich habs bis jetzt nicht hinbekommen.

Vielleicht seh' ich auch vor lauter Bäumen den Wald nicht...

Gruß, Marc

 
Wurzel
08-12-2005, 18:49 
 
poste mal die query

 
MarcT
09-12-2005, 07:43 
 
Original geschrieben von Wurzel
poste mal die query

Na ja, ich habe da nicht so wirklich eine Query. Ich habe schon ein Duzent ausprobiert.

Aber hier die letzte:
SELECT
a.nr,
a.name,
s.datetime,
s.lieferbar
FROM
artikel AS a,
artikelstatus AS s
WHERE
s.artikelnr=a.nr

Die o. g. Query liefert mir jetzt alle Artikel mit allen dazugehörigen Lieferstatus. Ich möchte aber nur den letzten Lieferstatus bekommen.

Gruß, Marc

 
MarcT
09-12-2005, 09:53 
 
Habe es hinbekommen. Vielleicht umständlich aber es funktioniert.


CREATE temporary TABLE lastdatetime (
artikelnr MEDIUMINT( 8 ) NOT NULL ,
datetime DATETIME NOT NULL ,
PRIMARY KEY ( artikelnr, datetime )
);

INSERT INTO lastdatetime (artikelnr, datetime) SELECT a.no, MAX(s.datetime) FROM artikelstatus AS s, artikel AS a WHERE s.artikelr=a.no GROUP BY a.no;

SELECT a.nr, h.name, s.datetime, s.lieferbar FROM lastdatetime AS ldt,
artikelstatus AS s,
artikel AS a
WHERE
s.artikelnr=ldt.artikelnr AND
s.datetime=ldt.datetime AND
a.no=ldt.artikelnr

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:45 Uhr.