maren9: Suche nächsten zu bearbeitenden Datensatz

Hallo,

ich möchte alle Datensätze aus mail_adressen mit einem Text aus mail_infotext abarbeiten und so unseren Mitarbeiter fortwährend kurze aktuelle Informationen aufs Handy senden. In mail_status soll eingetragen werden, welche Datensätze bereits abgearbeitet wurden. Dazu muß diese Tabelle mehrere gleichzeitige Durchläufe aufnehmen (während Infotext 1 noch gemailt wird, kann Infotext 2 bereits gestartet werden). Der Mailer der mit PHP realisiert wird, muß also jederzeit feststellen können welcher Datensatz der nächste ist.

Ich hoffe bis hierhin habe ich die Datenbank richtig erstellt und alles normalisiert. Im Augenblick habe ich allerdings keine Idee, wie ich den SELECT formulieren muß, um die m_id des nächsten zu bearbeitenden Datensatzes zu ermitteln. Denn für diesen gibt es ja in mail_status noch keinen Eintrag.

Habe ich etwas vergessen oder falsch gemacht?

Tabelle mit Mail Adressen
mail_adressen
-----------------------
|m_id    |m_email     |
-----------------------
|int(10) |varchar(255)|
-----------------------

Tabelle mit Infotext
mail_infotext
----------------
|i_id   |i_text|
----------------
|int(10)|char  |
----------------

Tabelle mit Relation
mail_status
------------------------------------
|s_id   |m_id   |i_id   |s_status  |
------------------------------------
|int(10)|int(10)|int(10)|tinyint(3)|
------------------------------------

Gruß Maren

  1. Hallo,

    Frage: wie (und auch wieso) soll das System mehrere gleichzeitige Durchlaeufe erlauben bzw unterstuetzen? Wann bzw wodurch soll ein solcher Durchlauf angestartet werden?

    Definiere "naechsten Datensatz". Der naechste in mail_adressen oder mail_infotext? Ich nehme mal an: mail_infotext. Der "naechste" definiert sich dann dadurch: Gib mir die kleinste ID aus mail_infotext, die noch nicht in mail_status in der Spalte i_id drin steht.

    in SQL uebersetzt (pi * daumen):
    SELECT MIN(ID)
      FROM mail_infotext
      WHERE ID NOT IN (SELECT i_id FROM mail_status)

    Du solltest natuerlich auch gewaehrleisten, dass der momentan startende Prozess den Eintrag in mail_status so schnell und kurz wie moeglich gestaltet und waehrenddessen diese Tabelle sperrt, z.b. durch eine Datenbank Transaktion.

    Noch Fragen?

    Ciao, Frank

    1. Hallo Frank,

      Noch Fragen?

      Nein, vielen Dank! :) Ich habe zwar nicht so genau geschildert worum es mir geht, Du hast aber trotzdem den entscheidenen Fingerzeig geliefert.

      Gruß Maren