2010-12-30 14 views
0

私は最近、(パフォーマンスを最適化するために)1つのクエリに2つのクエリを組み合わせました...カウントを調べるための1つのクエリと、結果のためのもう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.. 

     } 
    } 


?> 

問題は、それが今、1つの結果を返すのですか? - 実際に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件の結果を返します...

だから私の質問はどのように私はこの問題を解決するが、私は後だものを達成んでしょうか?

答えて

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

結果セットの値に依存して結果がいくつあるかを示し、結果セットにゼロレコードがある場合はどうなりますか?*今度は2つの異なるケースを処理する必要があります。 –

1

COUNTは通常GROUP BY句で使用されているaggregate functionです。私はあなたがそれを使用したときにクエリで意味があるとは思わない。

関連する問題