2010-12-30 2 views
0

최근에 (성능을 최적화하기 위해) 1 개의 쿼리에 2 개의 쿼리를 결합했습니다 ... 카운트를 확인하기위한 1 개의 쿼리와 다른 하나의 결과에 대해 카운트는 루프를 진행하기 전에 실제 결과를 보장합니다.MySQL은 while 루프 내에서 1 개의 결과를 표시하지만 실제로는 2 개의 결과가 나타 납니까?

Heres는 PHP 코드 :

<?php 

    $query = 'SELECT id, title, COUNT(id) FROM submissions ORDER BY sub_time DESC LIMIT 50'; 

    $result = mysql_query($query); 

    $count = mysql_result($result, 0, 2); 

    mysql_data_seek($result, 0); //mysql_result resets the internal pointer... 

    if ($count > 0) { 
     $i = 0; 
     while ($output = mysql_fetch_assoc($result)) { 
      ++$i; 

      //etc.. 

     } 
    } 


?> 

문제는 이제 한 결과를 반환입니까? - 실제로 2 결과가 나오면 (PHPMyAdmin을 통해 확인한 결과, 아래 코드 참조 - 아래 참조), COUNT (ID)가 초기 결과 쿼리와 결합되어 문제가 좁혀졌습니다. 그게 그렇게 행동하는 것.

때문에 나는 다음을 수행하는 경우 :

<?php 

    $query = 'SELECT id, title FROM submissions ORDER BY sub_time DESC LIMIT 50'; 

    $result = mysql_query($query); 

     $i = 0; 
     while ($output = mysql_fetch_assoc($result)) { 
      ++$i; 

      //etc.. 

     } 

?> 

그것은이 개 결과를 반환 ...

그래서 제 질문은 내가 어떻게이 문제를 해결하지만 난 후 무엇을 달성 할입니까?

답변

2

COUNT (ID)를 제거하고 루프를 시도하기 전에 반환 된 행 수를 확인하려면 mysql_num_rows() 함수를 사용하는 것이 좋습니다.

코드는 다음과 같을 수 있습니다 :

<?php 

$query = 'SELECT id, title FROM submissions ORDER BY sub_time DESC LIMIT 50'; 

$result = mysql_query($query); 

$count = mysql_num_rows($result); 

if ($count > 0) { 
    $i = 0; 
    while ($output = mysql_fetch_assoc($result)) { 
     ++$i; 

     //etc.. 

    } 
} 
+0

동의. 결과 집합에있는 값을 사용하여 결과의 ​​수를 알려주고 결과 집합에 레코드가 없으면 어떻게됩니까? * 이제 두 가지 사례를 처리해야합니다. –

1

COUNT는 일반적으로 GROUP BY 절과 함께 사용되는 aggregate function입니다. 나는 당신이 그것을 사용했을 때 그것이 쿼리에서 의미 있다고 믿지 않습니다.

관련 문제