Query문의 날짜 조건문을 index 적용되는 문법으로 수정

This commit is contained in:
2026-09-15 15:14:57 +09:00
parent 54e700434f
commit 46a048ade6
7 changed files with 74 additions and 31 deletions
+37 -15
View File
@@ -90,7 +90,9 @@ class TypingExamCollection extends DBMethodContainer
$query = "
SELECT TypingExamRecordID, Record
FROM typing_exam_record
WHERE MaestroID = ? AND PlayerID = ? AND WritingID = ? AND DATE(RecordDateTime) = DATE(NOW()) AND HOUR(RecordDateTime) = HOUR(NOW())";
WHERE MaestroID = ? AND PlayerID = ? AND WritingID = ?
AND RecordDateTime >= CAST(DATE_FORMAT(NOW(), '%Y-%m-%d %H:00:00') AS DATETIME)
AND RecordDateTime < CAST(DATE_FORMAT(NOW(), '%Y-%m-%d %H:00:00') AS DATETIME) + INTERVAL 1 HOUR";
$stmt = $this->mysqli->prepare($query);
$stmt->bind_param("iii", $maestroID, $playerID, $writingID);
$stmt->execute();
@@ -165,12 +167,14 @@ class TypingExamCollection extends DBMethodContainer
$query = "
SELECT DATE(RecordDateTime), MAX(Record)
FROM typing_exam_record
WHERE MaestroID = ? AND PlayerID = ? AND DATE(RecordDateTime) <= ? AND WritingID = ?
WHERE MaestroID = ? AND PlayerID = ? AND WritingID = ?
AND RecordDateTime < DATE(?) + INTERVAL 1 DAY
AND RecordDateTime >= DATE(?) - INTERVAL 7 DAY
GROUP BY DATE(RecordDateTime)
ORDER BY RecordDateTime DESC
LIMIT 7";
$stmt = $this->mysqli->prepare($query);
$stmt->bind_param('iisi', $maestroID, $playerID, $date, $writingID);
$stmt->bind_param('iisss', $maestroID, $playerID, $writingID, $date, $date);
$stmt->execute();
$stmt->bind_result($date, $highestRecord);
@@ -190,12 +194,15 @@ class TypingExamCollection extends DBMethodContainer
$query = "
SELECT TER.playerID As PlayerID, U.Name AS Name, MAX(TER.Record) AS HighScore
FROM typing_exam_record TER, player U
WHERE TER.MaestroID = ? AND TER.playerID = U.playerID AND YEAR(TER.RecordDateTime) = YEAR(?) AND MONTH(TER.RecordDateTime) = MONTH(?) AND DAYOFMONTH(TER.RecordDateTime) = DAYOFMONTH(?) AND HOUR(TER.RecordDateTime) = HOUR(?) AND TER.WritingID = ? AND TER.Record >= 0
WHERE TER.MaestroID = ? AND TER.WritingID = ?
AND TER.RecordDateTime >= DATE(?) + INTERVAL HOUR(?) HOUR
AND TER.RecordDateTime < DATE(?) + INTERVAL (HOUR(?) + 1) HOUR
AND TER.PlayerID = U.playerID AND TER.Record >= 0
GROUP BY TER.playerID
ORDER BY MAX(TER.Record) DESC;
";
$stmt = $this->mysqli->prepare($query);
$stmt->bind_param('issssi', $maestroID, $date, $date, $date, $time, $writingID);
$stmt->bind_param('iissss', $maestroID, $writingID, $date, $time, $date, $time);
$stmt->execute();
$stmt->bind_result($playerID, $name, $highScore);
@@ -215,12 +222,15 @@ class TypingExamCollection extends DBMethodContainer
$query = "
SELECT TER.playerID As PlayerID, U.Name AS Name, MAX(TER.Record) AS HighScore
FROM typing_exam_record TER, player U
WHERE TER.MaestroID = ? AND TER.playerID = U.playerID AND YEAR(TER.RecordDateTime) = YEAR(?) AND MONTH(TER.RecordDateTime) = MONTH(?) AND DAYOFMONTH(TER.RecordDateTime) = DAYOFMONTH(?) AND TER.WritingID = ? AND TER.Record >= 0
WHERE TER.MaestroID = ? AND TER.WritingID = ?
AND TER.RecordDateTime >= DATE(?)
AND TER.RecordDateTime < DATE(?) + INTERVAL 1 DAY
AND TER.PlayerID = U.playerID AND TER.Record >= 0
GROUP BY TER.playerID
ORDER BY MAX(TER.Record) DESC;
";
$stmt = $this->mysqli->prepare($query);
$stmt->bind_param('isssi', $maestroID, $date, $date, $date, $writingID);
$stmt->bind_param('iiss', $maestroID, $writingID, $date, $date);
$stmt->execute();
$stmt->bind_result($playerID, $name, $highScore);
@@ -240,12 +250,15 @@ class TypingExamCollection extends DBMethodContainer
$query = "
SELECT TER.playerID As PlayerID, U.Name AS Name, MAX(TER.Record) AS HighScore
FROM typing_exam_record TER, player U
WHERE TER.MaestroID = ? AND TER.playerID = U.playerID AND YEAR(TER.RecordDateTime) = YEAR(?) AND MONTH(TER.RecordDateTime) = MONTH(?) AND TER.WritingID = ? AND TER.Record >= 0
WHERE TER.MaestroID = ? AND TER.WritingID = ?
AND TER.RecordDateTime >= CAST(DATE_FORMAT(?, '%Y-%m-01') AS DATE)
AND TER.RecordDateTime < CAST(DATE_FORMAT(?, '%Y-%m-01') AS DATE) + INTERVAL 1 MONTH
AND TER.PlayerID = U.playerID AND TER.Record >= 0
GROUP BY TER.playerID
ORDER BY MAX(TER.Record) DESC;
";
$stmt = $this->mysqli->prepare($query);
$stmt->bind_param('issi', $maestroID, $date, $date, $writingID);
$stmt->bind_param('iiss', $maestroID, $writingID, $date, $date);
$stmt->execute();
$stmt->bind_result($playerID, $name, $highScore);
@@ -265,12 +278,15 @@ class TypingExamCollection extends DBMethodContainer
$query = "
SELECT TER.playerID As PlayerID, U.Name AS Name, MAX(TER.Record) AS HighScore
FROM typing_exam_record TER, player U
WHERE TER.MaestroID = ? AND TER.playerID = U.playerID AND YEAR(TER.RecordDateTime) = YEAR(?) AND MONTH(TER.RecordDateTime) = MONTH(?) AND DAYOFMONTH(TER.RecordDateTime) = DAYOFMONTH(?) AND HOUR(TER.RecordDateTime) = HOUR(?) AND TER.WritingID = ? AND TER.Record < 0
WHERE TER.MaestroID = ? AND TER.WritingID = ?
AND TER.RecordDateTime >= DATE(?) + INTERVAL HOUR(?) HOUR
AND TER.RecordDateTime < DATE(?) + INTERVAL (HOUR(?) + 1) HOUR
AND TER.PlayerID = U.playerID AND TER.Record < 0
GROUP BY TER.playerID
ORDER BY MAX(TER.Record) ASC;
";
$stmt = $this->mysqli->prepare($query);
$stmt->bind_param('issssi', $maestroID, $date, $date, $date, $time, $writingID);
$stmt->bind_param('iissss', $maestroID, $writingID, $date, $time, $date, $time);
$stmt->execute();
$stmt->bind_result($playerID, $name, $highScore);
@@ -290,12 +306,15 @@ class TypingExamCollection extends DBMethodContainer
$query = "
SELECT TER.playerID As PlayerID, U.Name AS Name, MAX(TER.Record) AS HighScore
FROM typing_exam_record TER, player U
WHERE TER.MaestroID = ? AND TER.playerID = U.playerID AND YEAR(TER.RecordDateTime) = YEAR(?) AND MONTH(TER.RecordDateTime) = MONTH(?) AND DAYOFMONTH(TER.RecordDateTime) = DAYOFMONTH(?) AND TER.WritingID = ? AND TER.Record < 0
WHERE TER.MaestroID = ? AND TER.WritingID = ?
AND TER.RecordDateTime >= DATE(?)
AND TER.RecordDateTime < DATE(?) + INTERVAL 1 DAY
AND TER.PlayerID = U.playerID AND TER.Record < 0
GROUP BY TER.playerID
ORDER BY MAX(TER.Record) ASC;
";
$stmt = $this->mysqli->prepare($query);
$stmt->bind_param('isssi', $maestroID, $date, $date, $date, $writingID);
$stmt->bind_param('iiss', $maestroID, $writingID, $date, $date);
$stmt->execute();
$stmt->bind_result($playerID, $name, $highScore);
@@ -315,12 +334,15 @@ class TypingExamCollection extends DBMethodContainer
$query = "
SELECT TER.playerID As PlayerID, U.Name AS Name, MAX(TER.Record) AS HighScore
FROM typing_exam_record TER, player U
WHERE TER.MaestroID = ? AND TER.playerID = U.playerID AND YEAR(TER.RecordDateTime) = YEAR(?) AND MONTH(TER.RecordDateTime) = MONTH(?) AND TER.WritingID = ? AND TER.Record < 0
WHERE TER.MaestroID = ? AND TER.WritingID = ?
AND TER.RecordDateTime >= CAST(DATE_FORMAT(?, '%Y-%m-01') AS DATE)
AND TER.RecordDateTime < CAST(DATE_FORMAT(?, '%Y-%m-01') AS DATE) + INTERVAL 1 MONTH
AND TER.PlayerID = U.playerID AND TER.Record < 0
GROUP BY TER.playerID
ORDER BY MAX(TER.Record) ASC;
";
$stmt = $this->mysqli->prepare($query);
$stmt->bind_param('issi', $maestroID, $date, $date, $writingID);
$stmt->bind_param('iiss', $maestroID, $writingID, $date, $date);
$stmt->execute();
$stmt->bind_result($playerID, $name, $highScore);
+12 -3
View File
@@ -25,7 +25,10 @@ function get_ranking_hour($maestroID, $appID) {
$query = "
FROM best_record BR, player P
WHERE BR.PlayerID = P.PlayerID AND DATE(BR.RecordDateTime) = DATE(NOW()) AND HOUR(BR.RecordDateTime) = HOUR(NOW()) AND BR.MaestroID = ? AND BR.AppID = ?
WHERE BR.MaestroID = ? AND BR.AppID = ?
AND BR.RecordDateTime >= CAST(DATE_FORMAT(NOW(), '%Y-%m-%d %H:00:00') AS DATETIME)
AND BR.RecordDateTime < CAST(DATE_FORMAT(NOW(), '%Y-%m-%d %H:00:00') AS DATETIME) + INTERVAL 1 HOUR
AND BR.PlayerID = P.PlayerID
GROUP BY BR.PlayerID
";
if(is_highest_record_prefer_app($appID)) {
@@ -55,7 +58,10 @@ function get_ranking_day($maestroID, $appID) {
$query = "
FROM best_record BR, player P
WHERE BR.PlayerID = P.PlayerID AND DATE(BR.RecordDateTime) = DATE(NOW()) AND BR.MaestroID = ? AND BR.AppID = ?
WHERE BR.MaestroID = ? AND BR.AppID = ?
AND BR.RecordDateTime >= CURDATE()
AND BR.RecordDateTime < CURDATE() + INTERVAL 1 DAY
AND BR.PlayerID = P.PlayerID
GROUP BY BR.PlayerID
";
if(is_highest_record_prefer_app($appID)) {
@@ -85,7 +91,10 @@ function get_ranking_month($maestroID, $appID) {
$query = "
FROM best_record BR, player P
WHERE BR.PlayerID = P.PlayerID AND MONTH(BR.RecordDateTime) = MONTH(NOW()) AND BR.MaestroID = ? AND BR.AppID = ?
WHERE BR.MaestroID = ? AND BR.AppID = ?
AND BR.RecordDateTime >= CAST(DATE_FORMAT(CURDATE(), '%Y-%m-01') AS DATE)
AND BR.RecordDateTime < CAST(DATE_FORMAT(CURDATE(), '%Y-%m-01') AS DATE) + INTERVAL 1 MONTH
AND BR.PlayerID = P.PlayerID
GROUP BY BR.PlayerID
";
if(is_highest_record_prefer_app($appID)) {
+6 -4
View File
@@ -26,8 +26,11 @@ function get_history_record($maestro_id, $app_id, $player_id, $date) {
$query = "
FROM best_record BR
INNER JOIN app AS AA
ON BR.MaestroID = ? AND BR.PlayerID = ? AND DATE(BR.RecordDateTime) <= ? AND BR.AppID = ".$app_id." AND BR.AppID = AA.AppID
INNER JOIN app AS AA
ON BR.AppID = AA.AppID
WHERE BR.MaestroID = ? AND BR.AppID = ? AND BR.PlayerID = ?
AND BR.RecordDateTime < DATE(?) + INTERVAL 1 DAY
AND BR.RecordDateTime >= DATE(?) - INTERVAL 7 DAY
GROUP BY DATE(BR.RecordDateTime)
ORDER BY DATE(BR.RecordDateTime) DESC
LIMIT 7
@@ -39,8 +42,7 @@ function get_history_record($maestro_id, $app_id, $player_id, $date) {
$query = "SELECT DATE(BR.RecordDateTime) AS Date, MIN(BR.BestRecord) AS HighScore, AA.AppName AS AppName".$query;
}
$stmt = $db_conn->prepare($query);
// $stmt->bind_param('iisi', $maestro_id, $player_id, $date, $app_id);
$stmt->bind_param('iis', $maestro_id, $player_id, $date);
$stmt->bind_param('iisss', $maestro_id, $app_id, $player_id, $date, $date);
$stmt->execute();
$stmt->bind_result($date, $score, $app_name);
+5 -2
View File
@@ -26,7 +26,10 @@ function get_ranking_record_day($maestro_id, $date, $app_id) {
$query = "
FROM best_record BR, player U
WHERE BR.MaestroID = ? AND BR.playerID = U.playerID AND YEAR(BR.RecordDateTime) = YEAR(?) AND MONTH(BR.RecordDateTime) = MONTH(?) AND DAYOFMONTH(BR.RecordDateTime) = DAYOFMONTH(?) AND AppID = ?
WHERE BR.MaestroID = ? AND BR.AppID = ?
AND BR.RecordDateTime >= DATE(?)
AND BR.RecordDateTime < DATE(?) + INTERVAL 1 DAY
AND BR.PlayerID = U.playerID
GROUP BY BR.playerID
";
if(is_highest_record_prefer_app($app_id)) {
@@ -37,7 +40,7 @@ function get_ranking_record_day($maestro_id, $date, $app_id) {
$query = $query."ORDER BY MIN(BR.BestRecord) ASC;";
}
$stmt = $db_conn->prepare($query);
$stmt->bind_param('isssi', $maestro_id, $date, $date, $date, $app_id);
$stmt->bind_param('iiss', $maestro_id, $app_id, $date, $date);
$stmt->execute();
$stmt->bind_result($playerID, $name, $high_score);
@@ -26,7 +26,10 @@ function get_ranking_record_hour($maestro_id, $date, $time, $app_id) {
$query = "
FROM best_record BR, player U
WHERE BR.MaestroID = ? AND BR.playerID = U.playerID AND YEAR(BR.RecordDateTime) = YEAR(?) AND MONTH(BR.RecordDateTime) = MONTH(?) AND DAYOFMONTH(BR.RecordDateTime) = DAYOFMONTH(?) AND HOUR(BR.RecordDateTime) = HOUR(?) AND AppID = ?
WHERE BR.MaestroID = ? AND BR.AppID = ?
AND BR.RecordDateTime >= DATE(?) + INTERVAL HOUR(?) HOUR
AND BR.RecordDateTime < DATE(?) + INTERVAL (HOUR(?) + 1) HOUR
AND BR.PlayerID = U.playerID
GROUP BY BR.playerID
";
if(is_highest_record_prefer_app($app_id)) {
@@ -37,7 +40,7 @@ function get_ranking_record_hour($maestro_id, $date, $time, $app_id) {
$query = $query."ORDER BY MIN(BR.BestRecord) ASC;";
}
$stmt = $db_conn->prepare($query);
$stmt->bind_param('issssi', $maestro_id, $date, $date, $date, $time, $app_id);
$stmt->bind_param('iissss', $maestro_id, $app_id, $date, $time, $date, $time);
$stmt->execute();
$stmt->bind_result($playerID, $name, $high_score);
@@ -26,7 +26,10 @@ function get_ranking_record_month($maestro_id, $date, $time, $app_id) {
$query = "
FROM best_record BR, player U
WHERE BR.MaestroID = ? AND BR.playerID = U.playerID AND YEAR(BR.RecordDateTime) = YEAR(?) AND MONTH(BR.RecordDateTime) = MONTH(?) AND AppID = ?
WHERE BR.MaestroID = ? AND BR.AppID = ?
AND BR.RecordDateTime >= CAST(DATE_FORMAT(?, '%Y-%m-01') AS DATE)
AND BR.RecordDateTime < CAST(DATE_FORMAT(?, '%Y-%m-01') AS DATE) + INTERVAL 1 MONTH
AND BR.PlayerID = U.playerID
GROUP BY BR.playerID
";
if(is_highest_record_prefer_app($app_id)) {
@@ -37,7 +40,7 @@ function get_ranking_record_month($maestro_id, $date, $time, $app_id) {
$query = $query."ORDER BY MIN(BR.BestRecord) ASC;";
}
$stmt = $db_conn->prepare($query);
$stmt->bind_param('issi', $maestro_id, $date, $date, $app_id);
$stmt->bind_param('iiss', $maestro_id, $app_id, $date, $date);
$stmt->execute();
$stmt->bind_result($playerID, $name, $high_score);
@@ -64,11 +64,12 @@ function get_best_record($maestro_id, $app_id, $player_id) {
$query = "
SELECT BestRecordID, BestRecord
FROM best_record
WHERE MaestroID = ? AND AppID = ? AND PlayerID = ? AND DATE(RecordDateTime) = DATE(NOW())
AND HOUR(RecordDateTime) = HOUR(NOW())
WHERE PlayerID = ? AND AppID = ? AND MaestroID = ?
AND RecordDateTime >= CAST(DATE_FORMAT(NOW(), '%Y-%m-%d %H:00:00') AS DATETIME)
AND RecordDateTime < CAST(DATE_FORMAT(NOW(), '%Y-%m-%d %H:00:00') AS DATETIME) + INTERVAL 1 HOUR
";
$stmt = $db_conn->prepare($query);
$stmt->bind_param("iii", $maestro_id, $app_id, $player_id);
$stmt->bind_param("iii", $player_id, $app_id, $maestro_id);
$stmt->execute();
$stmt->bind_result($prev_best_record_id, $prev_best_record);
$stmt->fetch();