Paidmail design

Snyke

Well-known member
ID: 348381
L
27 Mai 2009
400
28
Sodele, mal wieder eine wahnsinnig theoretische frage: wie bau ich Paidmails am besten ein?

Erst mal ein bisschen background info: ich bin grad dabei die gesamten innereien aus VMS rauszureissen und neu zu programmieren, was im endeffekt dann auch in die Drupal module fliessen soll, aber das is momentan noch zukunfts musik. Mein vorgehen bis jetzt ist recht einfach, ich hab' 2 Tabellen einmal die Kampagnen
cid|tan|banner|target|value|reload|wait|adtype|status|sponsor
und dann hab' ich die Tabelle die jeden Klick zaehlt:
click_id|cid|uid|ip|hashcash|confirmation_time|status|expiration
was bei forcedbannern einwandfrei funktioniert. Um dann die moeglichen banner zu holen fuer den user benutz ich eine Query wie die hier:
PHP:
$fbanner = db_query(sprintf("SELECT *
  FROM vms_campaigns
  WHERE 
  cid NOT IN (
    SELECT camp_id
    FROM vms_campaign_clicks
    WHERE ip = %d
    AND expiration > UNIX_TIMESTAMP( )
    AND status & 0b001 = 1
  )
  AND status = 'enabled'
  ORDER BY value DESC LIMIT %d", ip2long($ip), $usr['max_forced'])) or die(mysql_error());
Funktioniert einwandfrei und is erst noch performant (innere Query kann von MySQL gecached werden). Wo das ganze jetzt interessant wird sind die Status codes in den clicks wo jedes Bit eine bedeutung hat (von rechts nach links):
  • 0 - Wurde der click bestaetigt?
  • 1 - Wurde der vcheck bestaetigt?
  • 2 - Wird vcheck verlangt?
  • 3 - Ist der klick archiviert?

So dann jetzt zum eigentlichen Problem: ich moechte paidmails in das system einbauen, aber moeglichst so dass ich keine weitere Tabelle brauch, und an den Klicks moechte ich auch so wenig wie moeglich drehen.
Sehe ich das richtig dass ich einfach ein neues status bit einbauen kann um den versand der mail zu markieren? Und dann mach ich ein refresh auf confirmation_time und expiration sobald der Benutzer die Bestaetigung antritt?

Oder sieht da grad jemand eine elegantere Methode?
 
Hab's mir doch anders ueberlegt, ich werd' doch eine separate Tabelle machen die sowohl mail queue ist als auch reload lock ist, das macht das ganze doch um einiges einfacher als grossartig mit lock refreshes anzufangen.