2017-02-17 21 views
-3

問題の原因を特定しようとしましたが、私は回って同じ問題を持つ人を見つけることができませんでした.. 。[MySQL] [PHP]サブクエリと同じ結果がありません:php call VS phpMyAdmin

だから私は、この要求があります。

select killer as idPlayer FROM 
(SELECT v.idPlayer as victim, v.name as vicName,k.idPlayer as killer, k.name as kilName, count(*) as number 
FROM stats_players v 
LEFT OUTER JOIN stats_events e ON v.idPlayer = e.idPlayerVictim 
LEFT OUTER JOIN stats_players k ON e.idPlayer = k.idPlayer 
WHERE e.type="PVP" 
GROUP BY v.idPlayer,k.idPlayer 
HAVING COUNT(*) > 3 ORDER BY COUNT(*) DESC) AS T 
group by killer 
order by count(*) DESC, sum(number) DESC 
LIMIT 1 

のphpMyAdminで正常に動作し、それは私がしたいだけで何、私に1つのレコードを返します。

私はそのような正確に同じ要求を(PDO付き)PHPの呼び出しを使用する場合:

try { 
    $bdd = new PDO('mysql:host=' . SQL_HOST . ';dbname=' . SQL_DBASE, SQL_USER, SQL_PASS); 
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    $bdd->query('SET session wait_timeout=120'); 
    $bdd->query('SET session interactive_timeout=120'); 

} catch (PDOException $e) { 
    die('Error during the connection to the MYSQL database : ' . $e->getMessage()); 
} 

$title['request'] = 'select killer as idPlayer FROM 
    (SELECT v.idPlayer as victim, v.name as vicName,k.idPlayer as killer, k.name as kilName, count(*) as number 
    FROM stats_players v 
    LEFT OUTER JOIN stats_events e ON v.idPlayer = e.idPlayerVictim 
    LEFT OUTER JOIN stats_players k ON e.idPlayer = k.idPlayer 
    WHERE e.type="PVP" 
    GROUP BY v.idPlayer,k.idPlayer 
    HAVING COUNT(*) > 3 ORDER BY COUNT(*) DESC) AS T 
    group by killer 
    order by count(*) DESC, sum(number) DESC 
    LIMIT 1'; 

$playerList = request_db($bdd,$title['request']); 

function request_db($bdd, $request, $txt = '') { 
    try { 
     if (isset($_GET['debug']) && $_GET['debug'] == 'request') { 
      echo $request . '<br>'; 
      // logfile('requete : ' . $request); 
     } 

     $timeReqStart = microtime(true); 
     $result = $bdd->query($request); 
     $timeReqEnd = microtime(true); 
     $timeReq = $timeReqEnd - $timeReqStart; 
     if ($txt != '') { 
      echo $txt . '<br>'; 
     } 
     if (preg_match("/^SELECT/", $request)) { /* Return the ID of the last request (INSERT ONLY) */ 
      $res_tab = $result->fetchAll(); 
      $result->closeCursor(); 
      return $res_tab; 
     } else if (preg_match("/^INSERT/", $request) || preg_match("/^UPDATE/", $request)) { /* All that not insert return table */ 
      echo 'Time Process request : ' . number_format($timeReq, 3) . ' sec <br>'; 
      return $bdd->lastInsertId(); 
     } 
    } catch (Exception $e) { 
     echo 'Error while contacting the database. Please contact the administrator. <br>'; 
     logfile($request); 
     logfile('request error :' . $e->getMessage()); 
     if (isset($_GET['debug'])) { 
      echo 'request : ' . $request . '<br>'; 
      die('Error during the request to the MYSQL database : <br>' . $e->getMessage()); 
     } 
    } 
} 

結果は私のすべてで何も返しません。..

だから私は削除しようとしましたそのような私のリクエストで、サブクエリ:

SELECT v.idPlayer as victim, v.name as vicName,k.idPlayer as killer, k.name as kilName, count(*) as number 
    FROM stats_players v 
    LEFT OUTER JOIN stats_events e ON v.idPlayer = e.idPlayerVictim 
    LEFT OUTER JOIN stats_players k ON e.idPlayer = k.idPlayer 
    WHERE e.type="PVP" 
    GROUP BY v.idPlayer,k.idPlayer 
    HAVING COUNT(*) > 3 ORDER BY COUNT(*) DESC 

とアクション(phpMyAdminのかPhpCAllを介して)の両方が、私が目を持って、正常に動作しますどちらの場合でも良い結果が得られます。

なぜphpコールはサブクエリを望まないのですが、phpmyadminではうまく機能しますか? :( は

+0

あなたのPHPコードも投稿できますか? – flynorc

+0

私のpdo呼び出しの次のコード行を追加しました! –

+0

'$ request'がどのようなものか分かりません。 –

答えて

0

[OK]を、私の機能では、私の要求の開始時に「選択」から来る問題「request_db()」、私の条件の待機を

ありがとう(私はWAMPサーバを使用しています)それは大文字と小文字を区別するので、うまくいきません:)

私の要求を '選択'から 'SELECT'に変更して、今すぐ 'SELECT'に変更します。それは魅力のように働く。

関連する問題