問題の原因を特定しようとしましたが、私は回って同じ問題を持つ人を見つけることができませんでした.. 。[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ではうまく機能しますか? :( は
あなたのPHPコードも投稿できますか? – flynorc
私のpdo呼び出しの次のコード行を追加しました! –
'$ request'がどのようなものか分かりません。 –