2012-05-08 4 views
0
내가 트위터 API를 사용하여 MySQL 데이터베이스에 트윗을 로그인 봤는데 PHP는 다음과 같은 기능을 사용하여

:업데이트 MySQL의 행

function saveTweets($screen_name) { 
global $link; 

$screen_name = dbEscape(strtolower(trim($screen_name))); 
if (!$screen_name) { echo "<p><strong>Error: No screen name declared.</strong></p>\n"; return false; } 

$row = dbGetRow("SELECT `id` FROM `twitter` WHERE `screen_name`='$screen_name' ORDER BY `id` DESC LIMIT 1"); 
$last_id = $row['id']; 


$url = "http://api.twitter.com/1/statuses/user_timeline.xml?screen_name=$screen_name&count=1500&include_rts=true" ; 
if ($last_id) { $url .= "&since_id=$last_id" ; } 
$ch = curl_init($url); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, TRUE); 
$xml = curl_exec ($ch); 
curl_close ($ch); 

$affected = 0; 
$twelement = new SimpleXMLElement($xml); 
foreach ($twelement->status as $status) { 
    $text = dbEscape(trim($status->text)); 
    $time = strtotime($status->created_at); 
    $id = $status->id; 
    $retweet_count = $status->retweet_count; 
dbQuery("INSERT INTO `twitter`  (`id`,`screen_name`,`time`,`text`,`hidden`,`retweet_count`) VALUES  ('$id','$screen_name','$time','$text','n','$retweet_count') ON DUPLICATE KEY UPDATE $row[retweet_count] = VALUES('$retweet_count')"); 
    $affected = $affected + dbAffectedRows(); 
} 

return "<p>".number_format($affected)." new tweets from $screen_name saved.</p>\n" ; 
} 

echo saveTweets('Phil'); 
?> 

이 모든 트윗, 시간과 사람을 기록하기 위해 노력을 게시,하지만 retweet_count이 항목의 시간에 로그인 할 때 - 내가 로그인하면 트윗이 기록 될 때 그래서 0 될 가능성이 높습니다 - 내가 실행할 때 그런 기능

ON DUPLICATE KEY UPDATE $row[retweet_count] = VALUES('$retweet_count')"); 

를 얻을 수 없다 트윗이 다시 retweet되면 나중에 쿼리가 행을 업데이트합니다.

retweet_count에 대한 항목의 대부분은 동일하므로 (0 또는 1), 기본 키 - id는 고유해야하며 retweet_count를 UNIQUE로 설정할 수 없습니다. 또한 자동 증가 열 id - colid - 그것은 실제로 트위터 API에서 가져온 것이 아니기 때문에 고유 할 수 있으며 유일하게 설정됩니다.

int가 이미 포함 된 행을 업데이트하는 것이 더 좋은 기능이 있습니까? 감사합니다

답변

1

구문이 잘못되었습니다. 그냥해야한다 :

ON DUPLICATE KEY UPDATE column_name = new_value, ... 

즉 당신이 정말로 귀하의 경우에 특히 유용하지 VALUES() 기능을 (사용를 원하는 경우,

ON DUPLICATE KEY UPDATE `retweet_count` = '$retweet_count' 

또는 - 여러 삽입 할 때 정말에만 유용 하나의 INSERT 문 행) :

ON DUPLICATE KEY UPDATE `retweet_count` = VALUES(`retweet_count`) 
+0

나는 그것이 가능성이 내 구문 동의 이렇게 빨리 회신 주셔서 감사 것이지만, UNFO 다행히도 이러한 제안은 데이터베이스를 업데이트하지 않았습니다. VALUES() 함수는 여기에있는 다른 게시물에서 볼 수있는 예일 뿐이므로이를 사용하는 데는 별 도움이되지 않습니다. – Phil