2009-07-23 6 views
0

私は自分のコードをリファクタリングしています。以下のコードの最初のクエリは、送信された最新のタブのtab_idを取得します。 2番目のQueryは各タブの詳細を取得します。 私の古いやり方で、私はPHPとHTMLを組み込みました。本当に完全な混乱でした。今は2つのクエリを1にマージし、そして/または配列にロードしたいと思います。私はそれがむしろSQL関連の問題だと思うPHPの2次元配列に複数のmysqlクエリがあります

WHERE tabs.tab_id IN (1,2,3,4) 

やイベント

WHERE tabs.tab_id in (select tab_id from tabs ...) 

:なぜSQLを使用しない

は、お気軽におよび/または肉屋

function get_newest_tabs() 
{ 
    $db_open; 
    $sql = "SELECT tab_id, song_id, user_id FROM tabs ORDER BY time_added DESC ". "LIMIT 15"; 
    $result = mysql_query($sql) or die("ERROR - newest tabs function: ".mysql_error()); 

    if (mysql_num_rows($result) > 0) 
    { 
     for($i = 0; $i < mysql_num_rows($result); $i++) 
     { 
      $tab_id = mysql_result($result, $i, "tab_id"); 
      $db_open; 
      $sql = 
       "SELECT tabs.tab_id, tabs.tab_version, tabs.number_of_hits, artist.artist_name, users.user_alias, songs.song_name, tabs.time_added 
       FROM tabs, users, artist, songs 
       WHERE tabs.tab_id ='".$tab_id."' AND tabs.user_id = users.user_id AND tabs.song_id = songs.song_id AND songs.artist_id = artist.artist_id"; 
      $result2 = mysql_query($sql) or die("ERROR - i3p mysql - 4: ".mysql_error()); 

      if(mysql_num_rows($result2) == 1) 
      { 
       $song_name = mysql_result($result2, 0, "songs.song_name"); 
       $artist_name = mysql_result($result2, 0, "artist.artist_name"); 
       $user_alias = mysql_result($result2, 0, "users.user_alias"); 
       $tab_version = mysql_result($result2, 0, "tabs.tab_version"); 
       $number_of_hits = mysql_result($result2, 0, "tabs.number_of_hits"); 
       $time_added = mysql_result($result2, 0, "tabs.time_added"); 

      } 
     } 
    } 
} 
+1

このリンクは興味深いかもしれません。なぜmysql_num_rowsを使うのが最良でないかもしれないかを説明します。 http://stackoverflow.com/questions/1165298/is-mysqlnumrows-efficient-and-or-standard-practice – Smandoli

答えて

3

複数のテーブルから選択するのではなく、JOINを使用することをお勧めします。タブ表を結合することもできます。限り、あなたはあなたのデータの配列を取得しますタブごとに1つのユーザー/曲/アーティストを持っているよう

while($row = mysql_fetch_array($result)) { 
$tabs[$row['tab_id']] = $row; 
} 

SELECT tabs.tab_id, tabs.song_id, tabs.user_id, tabs.tab_version, tabs.number_of_hits, artist.artist_name, users.user_alias, songs.song_name, tabs.time_added 
FROM tabs 
LEFT JOIN users ON users.user_id = tabs.user_id 
LEFT JOIN songs ON songs.song_id = tabs.song_id 
LEFT JOIN artist ON artist.artist_id = songs.artist_id 
ORDER BY tabs.time_added DESC LIMIT 15 

次に、あなたのようなループを行うことができます。

0

私はhegemonの提案を読む方法がわかりませんが、SQLの質問に同意します。つまり、途中でPHPを使用しないMySQLインターフェイスですべての作業を行い、完成したSQL文字列を取り込む必要があります。PHPで使用するためにSQLをフォーマットする便利な機能を持つphpMyAdminを使用します。