2013-05-11 6 views
0

Я создаю флеш-игру, где игрокам нужно проходить игру так быстро, как только можно. Я сделал игроков TOP 10, и он упорядочен по времени (от самого низкого до самого высокого), но у меня есть проблема, если один и тот же игрок играет несколько раз, он всегда добавляет в базу данных. Мне нужно, чтобы этот игрок и его лучшее (самое низкое) время только один раз будут записаны в базу данных или только однажды распечатали его имя. (Если время игрока меньше, чем сохраняется в базе данных, то в этом случае мне нужно обновить/вставить его.) Спасибо.MySQL. Вставьте и выберите данные в базу данных без дубликатов

Пример, как это:

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(); 
+0

Вам нужно только изменить свой выбор. – eLRuLL

ответ

0

изменить только ваш выбор:

SELECT userName,min(time) time FROM eurokos group by userName order by time ASC LIMIT 10; 
+0

Благодарим вас за ответ, если я использую '$ query =" SELECT userName, min (time) FROM eurokos group by userName упорядочивает по времени ASC LIMIT 10 ";' он возвращает имена без времени – 2013-05-11 16:28:39

+0

Я обновил ответ, возможно, потому, что вы используете только поле 'time', поэтому выберите нужное поле и измените его имя. Используйте обновленный ответ. – eLRuLL

+0

Это сработало, спасибо. – 2013-05-11 16:41:26

0

Делайте это перед вставкой записи

  1. Выполнить запрос на выборку и посмотреть, если это имя пользователя существует.

  2. Если он существует, сравнить два времени, если время дб больше, чем значение для вставки, выполнить запрос обновления для обновления времени на новое значение.

  3. Если он не существует, запустите запрос на вставку для этого пользователя.

+0

Спасибо за ответ. Как должна выглядеть функция if, чтобы проверить, существует ли она в базе данных? – 2013-05-11 16:18:16

+0

просто сделайте это, если (mysql_num_rows ($ result)> 0), тогда записи существуют или не существуют –

+0

Спасибо. Не могли бы вы показать мне, как это должно выглядеть, потому что я не могу это исправить ... – 2013-05-11 16:41:09

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 
} 
+0

спасибо за ответ, но у меня есть 2 разных файла 1 для INSERT orther для SELECT. – 2013-05-11 16:58:37

+0

Как я вижу, SELECT.php функционирует как табло. файл вставки должен использоваться как вставка/обновление – JoakimH

Смежные вопросы