2010-09-16 2 views
0

Я загружаю xml-файл с твитами, а затем добавляю его в базу данных Mysql. До этого момента он работает нормально, но id хочет сделать базовую проверку поля url, чтобы узнать, уже ли он уже добавлен в базу данных. Если его в базе данных уже есть идентификатор, чтобы обновить упоминание count else, вставьте его как новую запись. Это настоящий вопрос новичков, но я пытаюсь заставить его работать. Имеет код в его нынешнем виде:PHP/MySQL для проверки дублирующегося содержимого в базе данных

<?php 

require_once('functions/functions.php'); 

$dbhost = '****'; 
$dbuser = '****'; 
$dbpass = '****'; 

$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql'); 

if($conn) 
{ 
    echo "Database Connection Successfull...<br /><br />"; 
} 

$dbname = '****'; 
mysql_select_db($dbname) or die('Couldnt connect to database table'); 

if($dbname) 
{ 
    echo "Database ".$dbname." Selected..<br /><br />"; 
} 

    $tweetmeme = "http://api.tweetmeme.com/stories/popular.xml?category=sports-soccer&count=30" ; 

    $xml = @simplexml_load_file($tweetmeme) or die ("no file loaded") ; 
    if($xml) 
    { 
    echo "Tweetmeme XML loaded with ".count($xml->stories->story)." stories in the file..<br /><br />"; 
    } 
if(get_magic_quotes_gpc()) 
{ 
    echo "Magic Quotes is ON<br /><br />"; 
} 
$count_insert=0; 
$count_update=0; 

//Select url and id and compare to the url being added 
$url_compare = mysql_query("SELECT id,url FROM ft_tweets"); 


if($url_compare) 
{ 
    //echo_result($url_compare); 
    echo mysql_num_rows($url_compare)." rows loaded.<br /><br />"; 
} 

$url_compare = mysql_fetch_assoc($url_compare); 

foreach($xml->stories->story as $story) 
{ 
    $title=check_input($story->title); 


    $url=check_input($story->url); 

    $media_type=check_input($story->media_type); 

    $created=check_input($story->created_at); 

    $url_count=check_input($story->url_count); 

    $comment_count=check_input($story->comment_count); 

    $excerpt=check_input($story->excerpt); 



    $sql = "INSERT INTO ft_tweets (title,url,media_type,created_at,mention_count,comment_count,excerpt) VALUES ($title,$url,$media_type,$created,$url_count   ,$comment_count,$excerpt)"; 


    $result = mysql_query($sql) or die(mysql_error()); 
    if($result) 
    { 
     //echo "added to database<br />"; 
     $count_insert++; 
    } 
} 
echo $count_insert." Records added to the database<br /><br />"; 
$search=mysql_query("SELECT * FROM ft_tweets WHERE title LIKE '%liverpool%' OR excerpt LIKE '%lfc%'"); 
if($search) 
{ 
    echo "<br /><br />Found tweets mentioning Liverpool"; 
} 
//fetch 10 tweets from ft_tweets where liverpool or lfc is in the excerpt or the title and store it in a variable 
//echo_result($search); 
echo "<br />"; 
var_dump($search); 
echo "<br />"; 
?> 

ответ

1

Похоже, вам просто нужно сначала проверить дубликат твита.

$sql = "SELECT id FROM ft_tweets WHERE url = '" . mysql_real_escape_string($url) . "'"; 
$duplicate = mysql_query($sql); 
if (mysql_num_rows($duplicate) > 0) { 
    // some notice about duplicate tweet 
    $count_duplicate++; 
} else { 
    // insert the new 
    $sql = "INSERT INTO..."; 
} 
+0

не работает для меня, он работает, но не получает ни одного дубликата url в базе данных. Логика выглядит отлично, поэтому, возможно, ее формат URL-адреса до его входа в базу данных –

1

Если вы установили URL в качестве ключа можно использовать INSERT ... on DUPLACATE KEY UPDATE sytax.

+0

это решение более ... элегантно :), но вам понадобится MySQL 5.0+ –

+0

, вы предлагаете в отличие от использования условного идентификатора для первичного ключ вы используете url или просто заставляете url иметь уникальное свойство в базе данных –

+0

Если вы используете уникальный URL-адрес, вам не нужно использовать другие идентификаторы. – jcubic

Смежные вопросы