suche Hilfe bei MSQL Abfrage mit Datum

realbanner

wieder dabei
ID: 251
L
16 April 2008
87
3
hallo hoffe das ich hier Hilfe finde bei nem Problem mit meine DB

ich möchte einen Eintrag in einer Tabelle vornehmen wenn (heute) noch keiner eingetragen wurde.
sonnst soll dieser nur per update behandelt werden.
Tabelle beinhaltet (zahl,time)
hatte mir vorgestellt das es irgendwie mit Ymd geht ?
Tabelle trans

$now = time();
$heute = date("Ymd",$now); //=zb:20090520

jetzt soll beim Aufruf nachgeschaut werden ob schon ein Eintrag in der Tabelle
$heute entspricht dann

mysql_query("UPDATE trans SET zahl=zahl+'1' WHERE time= ?;
else
mysql_query("INSERT INTO trans (zahl,time) VALUES ('1','$now') ");

mir fehlt der richtige Ansatz für die Abfrage oder die richtige MSQL Funktion
habe schon gegoogelt bin aber nicht fündig geworden
Die Tabelle wird von mehreren Programm teilen genutzt und hat natürlich noch mehr Einträge !
Ich möchte halt das die Tabelle übersichtlich bleibt und nicht 1000 Einträge am Tag bekommt !

hoffe das mir jemand weiterhelfen kann
 
UNIQUE-Key auf zahl und time ist die Grundvoraussetzung.

PHP:
INSERT INTO trans(zahl, time) VALUES(1, DATE_FORMAT(NOW(), '%Y%m%d')) ON DUPLICATE KEY UPDATE zahl = zahl + 1

Greetz

paddya
 
UNIQUE-Key auf zahl und time ist die Grundvoraussetzung.

PHP:
INSERT INTO trans(zahl, time) VALUES(1, DATE_FORMAT(NOW(), '%Y%m%d')) ON DUPLICATE KEY UPDATE zahl = zahl + 1

Greetz

paddya

Danke !
werde mal schauen ob ich es umsetzen kann :)
msql ist halt nicht jederman sache
hab mir mal ein Dickes Buch zur Seite gelegt und werde dort auch mal nachschauen
 
hab es gerade mal getestet :-(
trägt leider Time falsch ein !
dort soll ja time() drinn sein
so wird aber nur jahrMonatTag dort reingesetzt
das war ja das große Problem das ich dort Time der letzten Abfrage drinn hab
und nun schauen möchte das dieser wert umgerechnet wird auf jahrMonatTag
nun mit aktuellen jahrMonatTag vergleichen und dann eintragen oder updaten
 
Dann brauchst du eine Extra-Spalte, um die Uhrzeit zu speichern, die dann auch jedes Mal aktualisiert werden muss.

Allerdings brauchst du gar kein if-else-Konstrukt mehr. Du musst einfach nur diese eine Abfrage ausführen, den Rest macht MySQL automatisch. Die Bestimmung des Timestamps im PHP-Teil ist auch unnötig dann. Das macht alles die Abfrage.

Greetz

paddya
 
UNIQUE-Key auf zahl und time ist die Grundvoraussetzung.

PHP:
INSERT INTO trans(zahl, time) VALUES(1, DATE_FORMAT(NOW(), '%Y%m%d')) ON DUPLICATE KEY UPDATE zahl = zahl + 1

Greetz

paddya

habs mit Deiner Hilfe doch noch geschafft
habs mit ner Abfrage gelöst
ist warscheinlich einfacher zu schreiben aber es funktioniert :)
PHP:
$now=time();
$db=mysql_fetch_array(mysql_query("SELECT datum FROM trans WHERE DATE_FORMAT(NOW(),'%Y%m%d') and von='Ref_link_verguetung'"));

if(!$db[datum]){
mysql_query("INSERT INTO trans (username, status , anzahl , von, datum) VALUES ('$ref', '+','$Ref_link_verguetung', 'Ref_link_verguetung', '$now') ");
}else{
mysql_query("UPDATE trans SET anzahl=anzahl+'$Ref_link_verguetung' WHERE datum='$db[datum]' AND von='Ref_link_verguetung'");
}
 
PHP:
$now=time();
$db=mysql_fetch_array(mysql_query("SELECT datum FROM trans WHERE DATE_FORMAT(NOW(),'%Y%m%d') and von='Ref_link_verguetung'"));

if(!$db[datum]){
mysql_query("INSERT INTO trans (username, status , anzahl , von, datum) VALUES ('$ref', '+','$Ref_link_verguetung', 'Ref_link_verguetung', '$now') ");
}else{
mysql_query("UPDATE trans SET anzahl=anzahl+'$Ref_link_verguetung' WHERE datum='$db[datum]' AND von='Ref_link_verguetung'");
}

Mal ganz ehrlich? Deine Lösung ist a) unlogisch und dürfte b) nicht mal funktionieren.

Voraussetzung ist, dass über den Spalten von und datum ein UNIQUE-Key liegt. Ohne das, wird es NICHT funktionieren.

PHP:
mysql_query("INSERT INTO trans(username, status, anzahl, von, datum) VALUES('" . $ref . "', '+', '" . $Ref_link_vergütung . "', 'Ref_link_verguetung', DATE_FORMAT(NOW(), '%Y%m%d')) ON DUPLICATE KEY UPDATE anzahl = anzahl + " . (int) $Ref_link_verguetung);

Greetz

paddya
 
PHP:
WHERE DATE_FORMAT(NOW(),'%Y%m%d')

was ist denn das für ein Quatsch?
Das ist keine Bedingung für einen Datensatz, dein Konstrukt da ist immer wahr und kann deswegen auch weggelassen werden :LOL:


Voraussetzung ist, dass über den Spalten von und datum ein UNIQUE-Key liegt. Ohne das, wird es NICHT funktionieren.

PHP:
ALTER TABLE trans ADD UNIQUE KEY (von, datum)

Ich würde die Tabelle aber ganz neu machen, denn da stimmt einiges nicht, oder ich sehe den tieferen Sinn nicht :LOL:
 
was ist denn das für ein Quatsch?
Das ist keine Bedingung für einen Datensatz, dein Konstrukt da ist immer wahr und kann deswegen auch weggelassen werden :LOL:




PHP:
ALTER TABLE trans ADD UNIQUE KEY (von, datum)

Ich würde die Tabelle aber ganz neu machen, denn da stimmt einiges nicht, oder ich sehe den tieferen Sinn nicht :LOL:

ja ist immer wahr :-(
Time() wird beim Eintrag in time gespeichert !
also suche ich jetzt immer noch ne Abfrage welche eine Zeile aus ner tabelle liest welche aus time den heutigen Tag nimmt
 
Zuletzt bearbeitet:
Code:
$now = date("dmY", time());

Code:
SELECT * FROM trans WHERE  date_format(time, '%d%m%Y') = $now
 
wie das wars es schon?ist ja langweilig
 
Dann gib uns mal die genaue Datenbankstruktur und die Abfrage, mit der du es versucht hast...

Greetz

paddya

PHP:
$now=time();

$nown = date("dmY",$now);
$ergebnis=mysql_fetch_array(mysql_query("SELECT datum FROM trans WHERE date_format(datum,'%d%m%Y') = '$nown' AND von='Ref_link_verguetung' AND username='$ref'"));

if(!$ergebnis[datum]){
mysql_query("INSERT INTO trans (username, status , anzahl , von, datum) VALUES ('$ref', '+','$Ref_link_verguetung', 'Ref_link_verguetung', '$now') ");
}else{
mysql_query("UPDATE trans SET anzahl=anzahl+'$Ref_link_verguetung' WHERE datum='$ergebnis[datum]' AND von='Ref_link_verguetung' AND username='$ref'");
}


DB
CREATE TABLE IF NOT EXISTS `trans` (
`username` varchar(255) COLLATE latin1_german1_ci NOT NULL DEFAULT '0',
`status` varchar(255) COLLATE latin1_german1_ci NOT NULL DEFAULT '0',
`anzahl` varchar(255) COLLATE latin1_german1_ci NOT NULL DEFAULT '0',
`von` varchar(255) COLLATE latin1_german1_ci NOT NULL DEFAULT '0',
`datum` varchar(255) COLLATE latin1_german1_ci NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci;

es sollen Aufrufe immer gezählt werden aber nur ein Eintrag pro Tag in der DB sein