MySQL Tabelle mit doppelter Nutzung

tvtotal

Erfahrenes Mitglied
Hallo, ich habe eine vorgegebene Tabelle verweise mit folgenen Spaltennamen:

ID ARTICLE PASTID FUTIDI FUTID2 STAMP

Über eine Anwendung werden Artikel zugewiesen, d.h. Artikel können unendlich oft vorkommen, dürfen aber Werte bei PASTID FUTIDI FUTID2 nur einmal enthalten. Deswegen meine Frage(n):
Wie kann ich bewerkstelligen, dass wenn die Werte PASTID FUTIDI FUTID2 noch leer sind, eine bestimmte(nämlich die mit dem frühesten Stamp) beschrieben wird und wenn die Werte drin sind immer nur diese für die Verarbeitung also Abfrage genutzt wird?

Ich hoffe, das ist verständlich.

Danke im Voraus.

Grüße

tvtotal
 
Hi,

anders ausgedrückt:

Du hast einen UNIQUE auf die Spalten PASTID, FUTID1 UND FUTID2.
Falls ein Eintrag bereits vorhanden ist, soll dieser überschrieben werden, ansonsten ein neuer angelegt werden.

Verstehe ich das so richtig? Falls nicht, was meinst du mit "die Werte PASTID.... noch leer sind" und was hat der STAMP damit zu tun?

// Edit: Kannst du uns die Struktur der Tabelle als CREATE TABLE beschreiben? Was willst du genau erreichen, kannst du für die beiden Fälle ein Beispiel erstellen?

Grüsse,
BK
 
Ich versuch jetzt mal zu verstehen. Die Kombination der drei Felder pro Artikel ist entweder leer oder eindeutig.

Bei deinem 'bestimmte.. beschrieben wird'. Bedeutet das, dass dann die 3 IDS ausgefüllt werden?

Auf gut deutsch:
1) ÄltesterEintrag mit einer bestimmten Artikelnummer suchen, bei dem die 2 Felder ller sind
2) Die 3 Felder abfüllen
3) Diesen Eintrag als Aktuellen Eintrag für den Artikel verwenden.

Wie kommt STAMP zustande?
So wie ich das sehe, kann man dann den Eintrag nehmen, der die 3 Felder ausgefüllt hat und den grössten Timestamp besitzt.

Zum Thema neuster/ältester Eintrag: http://wiki.yaslaw.info/dokuwiki/doku.php/sql/tutorials/selectrecordwithmaxdatepergroup

Unter der Annhame, dass keine zwei gleiche Stamps für einen Artikel bestehen kann:
SQL:
-- Update der ältesten leeren Zeile für ein Artikel (id=123)
update
    my_table as t
set pastid = 1,
    futidi = 2,
    futid2 = 3
where
    t.article  = 123
    and t.stamp = (
        select min(stamp)
        from my_table as t_min
        where t_min.article = t.article
        and t_min.pastid is null
        and t_min.futidi is null
        and t_min.futid2 is null
    );

-- Auswahl des aktuellsten Eintrages für einen Artikel (id=123)
select t.*
from my_table as t
where
    t.article  = 123
    and t.stamp = (
        select max(stamp)
        from my_table as t_min
        where t_min.article = t.article
        and not t_min.pastid is null
        and not t_min.futidi is null
        and not t_min.futid2 is null
    );
 
Hallo,

ich habe meinen Chef überzeugen können, mehrere Tabellen daraus zu machen. So sind die Zuordnungen eindeutig und der Beitrag kann geschlossen werden.

Danke vielmals für die Antworten.

Grüße

tvtotal

Nachtrag: Ich probiere den Query trotzdem mal aus. Wird sicher wieder gehen, wie alles was Du bisher geschrieben hast. Danke.
 

Neue Beiträge

Zurück