2016-08-07 4 views
2

In meiner Anwendung habe ich 35 verschiedene Websites, jede hat eine Website-ID. Auf allen diesen Websites werden auf jeder Website verschiedene Kampagnen ausgeführt (Campaign_id).Neuen Datensatz erstellen, wenn es ein neuer Tag ist, sonst UPDATE ON DUPLICATE KEY

Mein Ziel ist es, die Anzahl der Zugriffe einer Kampagne auf einer Website pro Tag aufzuzeichnen. Ich brauche es, um den Datensatz automatisch zu erstellen, wenn das Datum site_id/campaign_id/today nicht existiert. Wenn es existiert, sollte es nur die Treffer aktualisieren. Ich erzeugen nur zufällig eine Site-ID und Kampagnen-ID zum Beispiel Sake

In diesem Beispiel
$site_id = rand(1,99); 
$campaign_id = rand(1,99); 
mysql_query("INSERT INTO `out` (site_id,campaign_id,hits) VALUES(".$site_id.",".$campaign_id.",1) 
      WHERE date = '".date('Y-m-d')."' 
      ON DUPLICATE KEY UPDATE hits=hits+1, 
      date = '".date('Y-m-d')."' 
      "); 

Die oben gibt mir genau das, was ich will, aber das Datumsfeld ist immer 0000-00-00. Ich brauche es, um das heutige Datum zu sein, und die Treffer müssen +1 auf jede Transaktion danach sein. Irgendwelche von euch Leuten mit Großartigkeit haben eine Idee davon, wie man das ändert, um es zum Laufen zu bringen?

+0

Einige Daten können helfen, das Problem zu klären – Strawberry

+0

Das Feld 'date' - ist als automatisches Zeitstempelfeld definiert - in der obigen Sql füllen Sie dieses Feld nicht auf (das sollte mit Backticks im sql btw umkleidet sein) - und ... die mysql-Funktionen sind veraltet, wechseln Sie zu mysqli oder pdo – RamRaider

+0

Welche Art von Daten? site Site_ID ist eine Zufallszahl und ist daher campaign_id. Treffer sind nur Treffer + 1 und das Datum ist das aktuelle Datum. –

Antwort

0

Die Antwort ist einfach. Fügen Sie einfach das Datum ein und machen Sie so effektiv jede Seite, Kampagne und Datum einzigartig. Nach dem Einfügen aktualisiert die nächste Transaktion nur die Treffer. Am folgenden Tag wird ein neuer Datensatz erstellt, da sich das Datum geändert hat. Die Treffer am nächsten Tag werden am nächsten Tag aktualisiert.

@mysql_query("INSERT INTO `out` (site_id,campaign_id,hits,date) VALUES(".$site_id.",".$campaign_id.",1,'".date('Y-m-d')."') 
      ON DUPLICATE KEY UPDATE hits=hits+1 
      "); 
0

Zuerst müssen Sie einen eindeutigen Index/Einschränkung für (site_id, campaign_id, date):

create index unq_out_site_campaign_date on `out`(site_id, campaign_id, date) 

(Beachten Sie, dass die Spalten in beliebiger Reihenfolge sein kann.)

Dann sind Sie in die Tabelle einfügen können mit Code wie:

INSERT INTO `out` (site_id, campaign_id, date, hits) 
    VALUES(".$site_id.", ".$campaign_id.", CURDATE(), 1) 
    ON DUPLICATE KEY UPDATE hits = hits+1; 

Vermutlich ist Ihr Ziel, die Treffer für zu erhöhen r heute. Wenn nicht, übergeben Sie den Wert für das aktuelle Datum und folgen Sie der gleichen Logik.

Verwandte Themen