0

16k 行のテーブルから 10 個の結果を取得しようとしています。

この表には、アーティストが表示されるたびに +1 を取得するビューと呼ばれる行があります。しかしトップアーティストだけに意外な結果が出ています。速度を上げるためにビュー行にインデックスを付けました。ループする必要があることはわかっていますが、10行すべてを取得する方法がわかりません

ループや一度に複数の行を取得することを扱っていないので、新しい mysqli でフォーマットするのに助けが必要です

配列の出力が返された例

// Get Top Viewed Artist
$TopViewedArtist = mysql_query("SELECT * FROM  `artists` ORDER BY  `artists`.`views` DESC LIMIT 10");
$TopViewedArtistInfo = mysql_fetch_assoc($TopViewedArtist);
$TopViewedArtist_TotalRows = mysql_num_rows($TopViewedArtist);
print_r($TopViewedArtistInfo); // the data returned from the query

これは、アーティスト名の結果を読み取り可能な形式で表示するためのソリューションです。

    $TopViewedArtists = mysql_query('SELECT * FROM `artists` ORDER BY `artists`.`views` DESC LIMIT 10');
    while (($TopArtist = mysql_fetch_assoc($TopViewedArtists)) !== FALSE) {
    //print_r($TopArtist);
    echo $TopArtist['artist']; echo "<br>";
    }

このコードは、他の人のために変更できます。ただし、mysqli に更新する必要があります

4

2 に答える 2

3

mysql_queryresultリソース オブジェクトを返します。配列と考えてください。その配列の内容を読み取る唯一の方法は、それを反復処理することです。mysql_fetch_assoc配列と同じように考えてくださいeach。次の行を返し、内部ポインターをインクリメントします。これがあなたがやりたいことだと思います:

<?php
// Get Top Viewed Artist
$TopViewedArtists = mysql_query('SELECT * FROM `artists` ORDER BY `artists`.`views` DESC LIMIT 10');
while (($artist = mysql_fetch_assoc($TopViewedArtists)) !== FALSE) {
  print_r($artist);
}
?>

mysql_fetch_assoc複数の値を持つ配列を返すことにも注意してください。配列には、表示されるすべてが含まれているはずです。$artist['artist'](outputs )で値にアクセスしますGwen Stefani

基本的な mysql 関数の代わりに、mysqli または PDO を調べることをお勧めしますか? 関数を使用する唯一の理由mysql_は、PHP 4 (もはやサポートされていないため、誰もまだ使用していないはずです) または古いアプリケーションで行き詰まっている場合です。これはどちらにもないように見えます。また、インターフェイスの経験がないように思われるため、より良いオプションを検討する必要があります.

于 2012-11-09T01:40:36.897 に答える
0

基本的に、次のようなものが必要です。

$q=mysql_query("SELECT * FROM  `artists` ORDER BY  `artists`.`views` DESC LIMIT 10");
while($r=mysql_fetch_array($q)){//this will loop 10 times presuming there are at least 10 entries in your table
  //use $r here, it represents a single row
  print_r($r);
}

他の人が言ったように、mysql_関数ではなく mysqli または pdo を使用する必要があります

于 2012-11-09T01:41:00.293 に答える