MySql INSERT mit Bedingung

dj-Rob

Grünschnabel
Hallöchen,
Ich wöchte für unsere Website eine Song_historie anlegen. Soweit habe ich das auch "hingefummelt" so nenne ich es mal.

$eintrag = "INSERT INTO song_historie (Datum, Zeit, Titel, Hoerer)
VALUES
('$datum', '$uhrzeit', '$aktueller_titel', '$anzahl_hoerer')";
$eintragen = mysql_query($eintrag);

In der Datenbank wird eine id zu jedem Eintrag erzeugt. Der Code ist in eine php-Seite eingefügt und diese wird per cronjob alle 4 min. aufgerufen um den aktuellen Titel zu speichern.
Ich möchte aber doppelte Einträge in Folge vermeiden. Meine Frage nun ist das machbar, dass eine Bedingung gesetzt werden kann " ob der aktuelle Titel in die letzte Abfrage " schon eingetragen wurde, oder kann ich erst in der Abfrage ... bzw. bei der Ausgabe einen Filter einbauen.

Gruß Rob
 
Hi und Willkommen bei tutorials.de :)

Mach die Spalte(n), die einen Eintrag eindeutig machen, beim create-table unique.

Gruß
 
Hallöchen und Danke fürs Willkommen :)

Als erstes bin noch nicht so bewandert mit php-mysql.
" create-tabe " kommt in meinem "Script" nicht vor.
Ich habe eine php-Seite in der ich die aktuellen Daten wie Datum, Zeit, aktuellen Titel und Hörerzahl vom unserem Shoutcastserver abgreife.
----
echo '<html><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><title>Songhistorie sql uebergeabe</title><body>';
echo 'Datum: ' . $datum . '<br />';
echo 'Zeit: ' . $uhrzeit . '<br />'
echo 'Aktueller ..............

Die Daten übergebe ich mit

$eintrag = "INSERT INTO song_historie (Datum, Zeit, Titel, Hoerer)
VALUES
('$datum', '$uhrzeit', '$aktueller_titel', '$anzahl_hoerer')";
$eintragen = mysql_query($eintrag);

Zu jedem Eintrag wird eine id erstellt: id int(10) UNSIGNED auto_increment

In der Daten Bank so:

12.08.2011 Patric... 202 2562 22:56:00
12.08.2011 Stefa... 216 2561 22:52:00
12.08.2011 Andre... 234 2560 22:44:00
12.08.2011 Nico G... 240 2559 22:40:00
12.08.2011 Nico G... 241 2558 22:36:00
12.08.2011 Die Gr... 246 2557 22:32:00

Mein Problem jetzt hier aktuell die id 2559 und 2558 haben den gleichen Titelnamen gespeichert.
Kann man das irgend wie mit einem Bezug auf die letzte id unterbinden.

LG Rob
 
Hallo dj-Rob,

wie sheel schon angemerkt hat, kannst Du einer SQL-Tabellenspalte (in deinem Fall dann die Spalte Titel) die Bedingung/Eigenschaft unique geben.

Damit erreichst Du, dass kein Titel doppelt vorkommen darf. Ändern kannst Du das in PHP-MyAdmin oder mit diesem SQL-Befehl:
Code:
ALTER TABLE song_historie ADD UNIQUE (Titel)

Beachte aber, dass dann wirklich kein Song doppelt eingetragen wird... auch wenn der Song vor 3 Monaten das letzte mal angehört wurde.

Gruß
 
Hallo Raisch,

Danke für eure schnellen Antworten.
Genau das ist das Problem, wenn der Titel schon in der Datenbank vorhanden ist z.B. vor einer Woche dann sollte dieser dort auch nicht gelöscht werden.

Ok, dann werde ich mal schauen ob ich das Problem auf der Ausgabe-Seite mit der Abfrage der Datenbank lösen kann.

LG Rob
 
Hallo dj-Rob,

wenn Du wirklich nur verhindern möchtest, dass in deiner Liste ein Song doppelt direkt hintereinander gespeichert wird, dann kannst Du das aber ganz einfach machen indem Du vor dem Eintragen in die Datenbank eine SQL-Abfrage machst und prüfst ob der Songname der selbe ist.

Code:
SELECT Titel FROM song_historie ORDER BY id DESC LIMIT 1

Den Titelnamen speicherst Du in eine Variable und vergleichst ihn mit dem aktuellen Titel, wenn es der selbe ist trägst Du ihn nicht ein.

Gruß
 
Hallo Raisch,

Das liest sich doch mal gut. :)
Dann werde ich jetzt mal versuchen deinen Tip umzusetzen.

Erst mal Danke ...

LG Rob
 
Hallöchen noch ein mal,

Habe jetzt mit deiner Hilfe

Code:
$abfrage1 = "SELECT Titel FROM song_historie ORDER BY id DESC LIMIT 1";
$ergebnis1 = mysql_query($abfrage1);
while($row = mysql_fetch_object($ergebnis1))

Ausgabe mit:
echo 'letzter Song: ' . $row->Titel . '<br />';

Und jetzt mein neues Problem:

$eintrag = "INSERT INTO song_historie (Datum, Zeit, Titel, Hoerer) WHERE '$aktueller_titel' <> '$row->Titel'
VALUES
('$datum', '$uhrzeit', '$aktueller_titel', '$anzahl_hoerer')";
$eintragen = mysql_query($eintrag);

funktioniert leider nicht. Welche Bedingung kann ich anwenden um einen Eintrag zu erzeugen wenn die beiden Variablen ungleich sind.

LG Rob
 
Hallöchen,

Ich habe jetzt diverse Möglichkeiten durchgetestet, aber ich bekomme die if-Anweisung nicht so eingabaut das es funktioniert.
Könntest Du mir vielleicht noch einen Tip geben an welche Stelle die Anweisung muß.

LG Rob
 

Neue Beiträge

Zurück