[SQL] Select-Anweisung

Hi,

habe hier soeben mal wieder lokal rumprobiert und bin auf folgendes gekommen:
Code:
SELECT *
FROM drucker AS d
INNER JOIN drucker_aktiv AS da ON da.drucker_id = d.id
WHERE da.id = (
SELECT max( da2.id )
FROM drucker_aktiv AS da2
WHERE drucker_id = d.id )
AND da.status = '2. Eintrag'

da.status ist der status (bzw. die letzte Aktion, die als letzte ausgeführt wurde).

Habe es zwar lokal meines Erachtens nach die richtigen Ergebnisse, würde das aber an deiner Stelle aber nochmal ganz genau durchgehen ;)

Wenn du die Tabellenstruktur vom Test brauchst, dann kann ich die auch noch posten.

Gruß
 
solangsam verwirrt mich das ganze etwas. und es geht leider nicht :(
kann ich dir die datenbank schicken? wenn ja schreib mir doch ne pn ;)
 
solangsam verwirrt mich das ganze etwas. und es geht leider nicht :(
kann ich dir die datenbank schicken? wenn ja schreib mir doch ne pn ;)

Hier mal auf deine Tabellenstruktur angepasst (so gut es jetzt ohne testen ging):
Code:
SELECT * FROM tbl_drucker AS d INNER JOIN tbl_aktiv AS a ON d.drucker_aktiv_id = a.Drucker_ID WHERE a.id = ( SELECT max( a2.id ) FROM tbl_aktiv AS a2 WHERE a2.drucker_aktiv_id = d.Drucker_ID) AND a.standort IN('IDENTA')

d.Drucker_ID = ID eines Druckers in der Tabelle, in der alle Drucker erfasst sind (tbl_drucker)
a.drucker_aktiv_id = Fremdschlüssel aus d.Drucker_ID aus Tabelle tbl_drucker in Tabelle tbl_aktiv
a.id = Primärschlüssel der Druckerbearbeitungsvorgänge in tbl_aktiv

Somit sollte das ganze eigentlich nicht mehr verwirren (ist jetzt untested) ;)

Gruß

P.S.: Bitte eine einheitliche Schreibweise von bestimmten Feldern angewöhnen :D
 
johnson's lösung ist richtig... bzw ein richtiger ansatz. alles andere was hier in den topic steht ist falsch...

die lösung von johnson hat bloss ein nachteil performance verlust ohne ende und mir ist auch keine wirklich bessere lösung bekannt. ausser ne temporäre tabelle mit dem jeweils aktuellsten datensatz. ist aber auch nicht unbedingt schön und kann zum erstellen auch schon zu lange dauern...

von daher würde ich hier auf ne extra spalte in der tabelle drucker setzen, in der die letzte id der aktion gespeichert wird. wenn man mysql5 hat (oder was anderes was trigger kennt mssql, postgre, oracle...) kommt man sogar ganz ohne modifizierung der client anwendung aus (sprich hier den php scripten). man erstellt einfach nen trigger der automatisch die letzte id setzt... (bsp für mysql5)

PHP:
CREATE TRIGGER idUpdate AFTER INSERT ON tbl_aktiv
	FOR EACH ROW BEGIN
   		UPDATE tbl_drucker SET protokoll_id = NEW.id WHERE drucker_id = NEW.drucker_id;
	END;

und jetzt kannste ganz einfach die daten so auslesen:

PHP:
SELECT
	*
FROM
	tbl_drucker INNER JOIN
	tbl_aktiv ON (tbl_drucker.protokoll_id = tbl_aktiv.id)
WHERE
	tbl_aktiv.standort = "IDENTA"

den trigger kann man natürlich auch selbst in seine anwendung einbauen... aber wenn die anwendung unsauber geschreiben ist. ist nen trigger in der datenbank bei weiten einfacher und sicherer.
 
@Johnson
danke für deine Mühe. Es geht ;)

@ZeroCCC
danke dir auch. werde ich mir anschauen und auf jeden fall mal, wenn ich zeit habe einbauen. bis dahin mache ich es noch mit der abfrage von johnson.

vielen dank euch allen ;)
Grüße ottscho