0

プレーヤーができるだけ早くゲームをパスする必要があるフラッシュ ゲームを作成しています。プレーヤーをトップ 10 にしました。これは時間順 (最低から​​最高) ですが、同じプレーヤーが数回プレイすると、常にデータベースに追加されるという問題があります。私はそのプレーヤーを作成する必要があり、彼の最高 (最低) タイムはデータベースに一度だけ書き込まれるか、彼の名前が一度だけ印刷されます。(プレーヤーの時間がデータベースに保存されているよりも低い場合は、その場合にのみ更新/挿入が必要です。)ありがとうございます。

例:

Peter 00:07
Peter 00:09
Peter 00:12
John 00:17
John 00:21

例:

Peter 00:07
John 00:17

ここに私のSelectFromDB.phpがあります

<?php 
    $time = $_POST['time'];     
    session_start();
    $name = $_SESSION['vardas']; 
    $time = strtotime($time);
    $times = date('s:H:i', $time);
    $_SESSION['test'] = $times;
    $_SESSION['test1'] = $username;


    $mysqli = new mysqli("localhost","my_db","pass","my_db");

    $query = "SELECT userName,time FROM eurokos ORDER by time ASC LIMIT 10";
if (!$mysqli->set_charset("utf8")) {
    printf("Error loading character set utf8: %s\n", $mysqli->error);
} else {
//    printf(" ", $mysqli->character_set_name());
}
 header('Content-Type: text/xml');
    echo '<?xml version="1.0" encoding="UTF-8"?>';
    echo '<results>';
    if ($result = $mysqli->query($query)) {
        while ($row = $result->fetch_assoc()) {
           echo $row["userName"].' '.$row["time"]."\n";
        }
        $result->free();
    }
    echo '</results>';
    $mysqli->close();
?>

ここに私の InsertToDB.php があります

<?php 

    $time = $_POST['time'];
    session_start();
    $name = $_SESSION['vardas']; 
    $time = strtotime($time);
    $times = date('s:H:i', $time);      
    $_SESSION['test'] = $times;
    $_SESSION['test1'] = $username;

    $mysqli = new mysqli("localhost","my_db","pass","my_db");
if ($stmt = $mysqli->prepare("INSERT into eurokos (time, userName) VALUE (?,?) ")) {
if (!$mysqli->set_charset("utf8")) {
    printf("Error loading character set utf8: %s\n", $mysqli->error);
} else {
//    printf(" ", $mysqli->character_set_name());
}


$stmt->bind_param('ss', $times, $name);
  // $stmt->bind_param("s", $username);

   $stmt->execute();

   if ($stmt->error != '') {
       echo ' error:'.$stmt->error;
   } else {
       echo 'success';
   }
   $stmt->close();
} else {
   echo 'error:'.$mysqli->error;
}
$mysqli->close();
4

3 に答える 3

0

選択を変更するだけです:

SELECT userName,min(time) time FROM eurokos group by userName order by time ASC LIMIT 10;
于 2013-05-11T16:19:54.360 に答える
0

レコードを挿入する前にこれを行う

  1. 選択クエリを実行し、そのユーザー名が存在するかどうかを確認します。

  2. 存在する場合、db 時間が挿入される値よりも大きい場合は 2 つの時間を比較し、更新クエリを実行して時間を新しい値に更新します。

  3. 存在しない場合は、そのユーザーに対して挿入クエリを実行します。

于 2013-05-11T16:16:08.703 に答える
0

これが私がそれをした方法です

$time = _SESSION[test];
$user = "john";

$res = $con->prepare("SELECT time from eurokos WHERE userName = '$user' AND time > '$time'");
$res->execute();
$allow_new_insert = $res->num_rows;

 if(!$allow_new_insert) {
  //insert magic code for updating time here
 }
于 2013-05-11T16:36:13.800 に答える