Doppelter Eintrag verhindern

raci

Mitglied
Hallo

Ich lasse ein script alle 3 Minuten per cronjob abrufen was auch funktioniert.

Nun mein Problem:

Ich möchte nicht das doppelt gespeichert wird .

Beispiel:

ID News Datum

1 Test 1 13:40

2 Test 1 13:43

3 Test2 13:46

also ID 1 und 2 sind gleich möchte aber nur das es einmal eingetargen wird.

Mit UNIQUE möchte ich es nicht lösen das es ja an nächsten Tag nicht angezeigt wird .

Habe jetz folgendes probiert aber klappt nicht wirklich

PHP:
mysql_select_db( 'datenbank' ) 
or die ( 'Die Datenbank existiert nicht.' ); 
$abfrage = "SELECT News FROM datenbank ORDER BY id DESC LIMIT 1"; 
$ergebnis = mysql_query( $abfrage )
$row = mysql_fetch_assoc( $ergebnis );



if ( $neuste_news != $row['News'] ) {
    $eintrag = "INSERT datenbank (News, Datum)
    VALUES ('$news', '$datum')";
    $eintragen = mysql_query( $eintrag );

    }
}

Danke für eure Hilfe
 
Du solltest nur Datensätze abholen, die dem Kriterium des Doppelten entsprechen. Dann brauchst du nur noch schauen, ob irgendwelche Datensätze gefunden worden sind. In etwa so:

PHP:
mysql_select_db( 'datenbank' ) 
or die ( 'Die Datenbank existiert nicht.' ); 
$abfrage = "SELECT News FROM datenbank WHERE News = '$news'"; 
$ergebnis = mysql_query( $abfrage ) or die(mysql_error());

if ( mysql_num_rows($ergebnis) == 0 ) {
    $eintrag = "INSERT datenbank (News, Datum)
    VALUES ('$news', '$datum')";
    $eintragen = mysql_query( $eintrag ) or die(mysql_error());
}

Natürlich könntest du es etwas professioneller machen, in dem du einen Index auf die Spalte News legst und dann INSERT .. ON DUPLICATE KEY UPDATE verwenden.
 
Zuletzt bearbeitet:
Hallo saftmeister

Vielen Dank für die schnelle Antwort.

Wenn es nicht klappen sollte wie würde es dann mit INSERT .. ON DUPLICATE KEY UPDATE aussehen.Könntest du mir ein Bespiel geben habe mit sowas noch nie gemacht.Wie ich eine Index auf die Spalte anlege weis ich aber mit dem code nicht.

Danke
 
Hallo

Gibt es keine andere Lösung um Dopplete Einträge nicht anzeigen oder eintragen zu lassen als UNIQUE.

Danke
 
Wieso anzeigen? Ich dachte, es ging ums Einfügen? UNIQUE bedeutet, das es nicht möglich ist, einen weiteren Datensatz hinzuzufügen, der den selben Wert enthält, wenn er schon vorhanden ist.

Wenn du den Datensatz nur einmal anzeigen willst, kannst du die GROUP BY Klausel verwenden.
 
Was spricht denn gegen den Index, den er wahrscheinlich sowieso hat? Also einfach ID abfragen und mit ON DUPLICATE KEY UPDATE ran. Füge mal eine Wrapper Funktion für Codeigniter mit an.
PHP:
public function insert_update( $table = NULL , $set = NULL , $created_field = '')
 {

    if ( empty( $table ) || ! is_array( $set ) || ! count( $set ) )
   {
       return FALSE;
   }          

    foreach ( $set as $key => $value )
   {
        // $created_field is always created date
        if( $key != $created_field )
       {
           $update[] = "`" . $key . "` = " . $this->db->escape( $value );
       }
   }
    $sql = $this->db->insert_string( $table, $set ).
                               " ON DUPLICATE KEY UPDATE ".implode( ', ', $update );

            if( $this->db->simple_query( $sql ) == FALSE )
            {
                return FALSE;
            }
            else
            {
                return $this->db->insert_id();
            }
        }
 
Zurück