0

誰でも複数のMySQLテーブルから選択し、phpを使用してゲームプレイ制限15でソートする方法を教えてもらえますか?

   <?php
   //$query = "SELECT id, gamename, gameplayed FROM action, adventure, augur, beauty, chess, joke, mmorpg, multiplayer, platform, puzzle, racing, shooting, sport, stratergy WHERE id = :id";
   $query = '
     SELECT id, gamename, gameplayed FROM((
     SELECT id, gamename, gameplayed 
     FROM action 
 ORDER BY gameplayed
 DESC LIMIT 15 
 ) UNION (
     SELECT id, gamename, gameplayed
     FROM adventure
     ORDER BY gameplayed
     DESC LIMIT 15
     ))as t ORDER BY gameplayed';

     $query_params = array(':id' => '1'); 
     //$query = "SELECT id, gamename FROM action, adventure, augur, beauty, chess, joke, mmorpg, multiplayer, platform, puzzle, racing, shooting, sport, stratergy ORDER BY gameplayed DESC LIMIT 15"; 
     try 
      { 
        // These two statements run the query against your database table. 
        $stmt = $db->prepare($query); 
        $stmt->execute($query_params); 
      } 
     catch(PDOException $ex) 
      { 
        // Note: On a production website, you should not output $ex->getMessage(). 
        // It may provide an attacker with helpful information about your code.  
        die("Failed to run query: " . $ex->getMessage()); 
      } 

      $rows = $stmt->fetchAll(); 
        foreach($rows as $row):
        echo $rows['t'];
        endforeach;
        unset($row); 
        ?>

Google で検索すると、解決策が union を使用していることがわかりましたが、「インデックス t を未定義」というエラーが表示され続けます

4

3 に答える 3

0

SQLクエリをこれに変更してみてください

SELECT id, gamename, gameplayed 
FROM action 
LIMIT 15 
UNION
SELECT id, gamename, gameplayed
FROM adventure
ORDER BY gameplayed DESC 
LIMIT 15
ORDER BY gameplayed
于 2013-04-21T16:35:49.783 に答える
0

選択クエリに「t」という名前のフィールドが表示されませんか? を試してみてくださいvar_dump() $rows。何がうまくいかないのかがわかります。

あなたがしていることは、テーブルのエイリアスを選択しようとしています。それらを選択することはできません。フィールドを選択するだけです。

結果は$rows、列の順序に従って、最初のテーブルと 2 番目のテーブルの要素のように、配列のサブアレイの先頭に表示されるはずgameplayedです。

于 2013-04-21T16:36:02.180 に答える