2012-04-04 12 views
0

Ich habe eine Frage bezüglich SQL, gab ich ein kleines Skript, das von Twitter bekommt, was Leute über jemanden sagen und es auf einem SQL-Tabelle von meinem Server einfügen, funktioniert der Code gut, aber meine Frage ist, wie kann das Skript einen Eintrag überspringen, wenn es bereits auf dem Tisch vorhanden ist, so dosent es mehrmals den gleichen Eintrag einfügen, hier ist der Code:Überspringen, wenn Wert existiert in SQL-Tabelle

<?php 
include '../config/config.php'; 
mysql_connect($dbhost, $dbuser, $dbpwrd) or die(mysql_error()); 
mysql_select_db($database) or die(mysql_error()); 

$rss = simplexml_load_file("http://search.twitter.com/search.rss?q=YaninGarciaD"); 
if($rss){ 
echo '<ul>'; 
foreach($rss->channel->item as $item){ 
      $author = (string) $item->author; // Title 
      $link = (string) $item->link; // Url Link 
      $description = (string) $item->description; 
      $pubDate = (string) $item->pubDate; //Description 

      list($usuario, $nombre3) = explode("@", $author);   
      list($basura, $nombre2) = explode(" (", $nombre3); 
      $nombre = substr($nombre2, 0, -1); 

      $piezasurl = explode("/", $link); 
      $status = $piezasurl[5]; 
      $piezasfecha = explode(" ", $pubDate); 

      if ($piezasfecha[2] == "Jan") { 
      $mes = "01"; 
      } elseif ($piezasfecha[2] == "Feb") { 
      $mes = "02"; 
      } elseif ($piezasfecha[2] == "Mar") { 
      $mes = "03"; 
      } elseif ($piezasfecha[2] == "Apr") { 
      $mes = "04"; 
      } elseif ($piezasfecha[2] == "May") { 
      $mes = "05"; 
      } elseif ($piezasfecha[2] == "Jun") { 
      $mes = "06"; 
      } elseif ($piezasfecha[2] == "Jul") { 
      $mes = "07"; 
      } elseif ($piezasfecha[2] == "Ago") { 
      $mes = "08"; 
      } elseif ($piezasfecha[2] == "Sep") { 
      $mes = "09"; 
      } elseif ($piezasfecha[2] == "Oct") { 
      $mes = "10"; 
      } elseif ($piezasfecha[2] == "Nov") { 
      $mes = "11"; 
      } elseif ($piezasfecha[2] == "Dic") { 
      $mes = "12"; 
      } 

      $fecha = $piezasfecha[3].'-'.$mes.'-'.$piezasfecha[1].' '.$piezasfecha[4]; 


mysql_query("INSERT INTO yg_mensajes 
(nombre, mensaje, twitter, url, postid, tipo, fecha, aprovado) 
VALUES ('$nombre', '$description', '$usuario', '$link', '$status', 2, '$fecha', 0) ") 
or die(mysql_error());    

echo '<li>'; 
echo $description.'<br />'; 
echo $usuario.'<br />'; 
echo $nombre.'<br />'; 
echo $link.'<br />'; 
echo $status.'<br />'; 
echo $fecha.'<br />'; 
echo '<br /></li>'; 

} 
echo '</ul>'; 
} 
?> 

eine gute Sache über twitter ist, dass die Postnummer (In diesem Code ist die Variable $ Status) ist eindeutig, das ist die Var, die nicht in der Tabelle sein sollte vor

Sie können das Skript in Aktion sehen hier: http://www.yaningarcia.com/unete/test.php

My SQL Tabellenstruktur ist diese:

CREATE TABLE `yg_mensajes` (
    `id` int(11) NOT NULL auto_increment, 
    `nombre` text, 
    `mensaje` text, 
    `twitter` text, 
    `url` text, 
    `postid` text, 
    `tipo` int(11) default NULL, 
    `fecha` datetime default NULL, 
    `aprovado` int(11) default NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; 

Dank !! : D

+1

ein paar Hinweise aktualisieren. Verwenden Sie pdo anstelle von mysql_ * -Funktionen. 2. Ist, wenn Sie sehen, dass es zu viel elseif gibt, verwenden Sie switch-case. – itachi

Antwort

0

hilft denke ich, müssen Sie Index auf postid Feld erzeugen und INSERT-Befehl IGNORE verwenden. oder benutzen INSERT ... ON DUPLICATE KY UPDATE, aber in diesem Fall müssen Sie einen oder mehrere Bereich (e) in Bezug auf den Code http://dev.mysql.com/doc/refman/5.6/en/insert.html

Verwandte Themen