2012-03-30 6 views
0

안녕하세요, 저는 하나의 MySQL 데이터베이스에서 데이터를 가져와 중복 테이블에 삽입하는 작은 쿼리를 가지고 있습니다. 문제는 데이터베이스에서 관련 데이터를 얻지 만 얻지 못하는 것입니다. 새 데이터베이스에 오류보고가 활성화되었지만 오류가 발생하지 않습니다.Insert Query Not working

$dbhost       = ""; 
$dbuser       = ""; 
$dbpass       = ""; 
$dbname       = ""; 
$conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ("Error connecting to database"); 
mysql_select_db($dbname); 
$result = mysql_query("SELECT * FROM ip_stats WHERE DATE(date) = CURDATE()") 
or die(mysql_error()); 
// keeps getting the next row until there are no more to get 
while($row = mysql_fetch_array($result)) { 
    $id = $row['id']; 
    $date = $row['date']; 
    $ip = $row['ip']; 
    $hostname = $row['hostname']; 
    $company_name = $row['company_name']; 
    $address = $row['address']; 
    $descr = $row['descr']; 

    echo "$id - $date - $ip - $hostname - $company_name - $address - $descr"; 
    ?> 
    <br /> 
    <?php 
    $query = "INSERT INTO `ip_stats11` (`id`, `ip`, `date`, `hostname`, `company_name`, `address`, `descr`, `updated`) 
     VALUES ('$id', '$ip', '$date', '$hostname', '$company_name', '$address', '$descr', 'yes')"; 
    echo "updated $ip"; ?><br /><?php 
} 
+4

실제 삽입 실행을 잊어 버렸습니다. – ajreal

+0

'$ query'를 실행하는 행은 어디에 있습니까? – egrunin

+0

고마워, 내가 그걸 알지 못했다니 믿을 수가 없어 –

답변

0

@klijn 당신이 INSERT 쿼리를 실행하는 것을 잊었다 아마 맞다 :

다음은 내 코드입니다. 그러나, 나는이 간단하고 빠르게 할 권합니다 :

$result = mysql_query(' 
    INSERT INTO `ip_stats11` (
     `id`, `ip`, `date`, `hostname`, `company_name`, `address`, `descr`, `updated` 
    ) 
    SELECT ip_stats.*, 'yes' 
    FROM ip_stats 
    WHERE DATE(date) = CURDATE() 
'); 

한가지 -이 구조 :

WHERE DATE(date) = CURDATE() 

매우 효율적되지 않을 수 있습니다. 함수를 날짜 열에 적용합니다. 이것이 DATE 데이터 유형이라면 필요하지 않으므로 생략해야합니다. DATETIME이고 시간 부분을 자르려면이 방법을 사용하면 mysql (및 대부분의 다른 RDBMS-es도 마찬가지 임)이 해당 열의 인덱스를 사용할 수 없게됩니다.

여기에 더 나은 방법 :

WHERE `date` BETWEEN CURRENT_DATE 
        AND CURRENT_DATE + INTERVAL 1 DAY - INTERVAL 1 SECOND 

이 작동하는 방법은 CURRENT_DATEdate 열을 가정 할 DATETIME (캐스트 할 것입니다은 DATETIME 또는 TIMESTAMP이며, 그것은을 나타내는 제로 timepart이있을 것이다 . 그 날 우리 BETWEEN ... AND 범위의 시작의 시작 범위의 끝을 위해, 우리는 말 : 이용하시기 바랍니다 내일 : 이후에 실제로 1 일의 첫 번째, 두 번째입니다

CURRENT_DATE + INTERVAL 1 DAY 

current_date. BETWEEN...AND...은 포괄적 인 범위 경계를 사용하므로 - MINUS 1 SECOND으로 1 초를 빼서 CURRENT_DATE로 표시된 마지막 날을 확실히 확보했기 때문에 이것은 완전히 정확하지 않습니다.