Système de Ladder

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Système de Ladder

Re: Système de Ladder

par zeus » 23 mars 2013, 20:43

Super !

Alors, l'état de l'art :
  • Sélectionner 5 utilisateurs au hasard dans la table lobby, et les insérer dans la table equipe1
  • Sélectionner 5 utilisateurs de la table lobby qui ne sont pas dans la table équipe1 et les insérer dans la table equipe2
  • Vider la table lobby
Comment on détruit maintenant ?
A ton avis ? ;)
Tu as 10 utilisateurs dans la table, tu viens d'en mettre 5 dans une table, 5 dans l"autre. Il faut donc que tu vides la tables ladder.
un simple DELETE FROM ladder fera l'affaire.
Autre problème, pour déclencher ça, je veux que dès qu'il y a 10 joueurs dans la table_lobby il fasse ces requêtes. Comment on fait?
C'est pas un problème de SQL ça, c'est à toi de décider.

Moi, je pense qu'il faut, lorsque tu insères les joueurs dans la table Ladder, une fois l'insertion faite, que tu vérifies s'il y a 10 joueurs, et si c'est le cas, que tu déclenches tout le traitement.

Re: Système de Ladder

par Bartsake » 23 mars 2013, 01:22

'INSERT INTO table_dire (`userPoints`, `userID`, `Id`) SELECT * FROM table_lobby WHERE Id NOT IN (SELECT Id FROM table_radiant)'
:)

Comment on détruit maintenant ? Autre problème, pour déclencher ça, je veux que dès qu'il y a 10 joueurs dans la table_lobby il fasse ces requêtes. Comment on fait?

Re: Système de Ladder

par zeus » 22 mars 2013, 23:27

Très bien. Si je voulais paufiner, je dirais qu'il faudrait que tu remplaces le SELECT * par un SELECT avec la liste des champs que tu veux. C'est plus pérenne et plus explicite.

Voyons où nous en sommes :
  • Sélectionner 5 utilisateurs au hasard dans la table lobby, et les insérer dans la table equipe1
  • Sélectionner 5 utilisateurs de la table lobby qui ne sont pas dans la table équipe1 et les insérer dans la table equipe2
  • Vider la table lobby
Il faut désormais sélectionner les joueurs dans la table lobby qui ne sont pas dans la table equipe1 (NOT IN).
Pour ça, il faut faire une sous-requête. Voilà l'indice suivant : http://dev.mysql.com/doc/refman/5.0/fr/ ... eries.html

Re: Système de Ladder

par Bartsake » 22 mars 2013, 19:18

INSERT INTO table_radiant (`Id`, `userID`, `userPoints`) SELECT * FROM table_lobby ORDER BY RAND () LIMIT 5


Voilà la 2e requête, elle fonctionne chez moi.
Ensuite comment je dois faire?

Re: Système de Ladder

par zeus » 22 mars 2013, 15:07

Bon, pour la première, requête, tu as trouvé, bien joué :pouce:
Mais tu essayes de brûler les étapes ;)

Si je reprend le plan, voilà où on en est (en souligné ce qui est fait) :
  • Sélectionner 5 utilisateurs au hasard dans la table lobby, et les insérer dans la table equipe1
  • Sélectionner 5 utilisateurs de la table lobby qui ne sont pas dans la table équipe1 et les insérer dans la table equipe2
  • Vider la table lobby
Il faut donc que tu trouves comment insérer dans la table "equipe1" les données que tu viens de sélectionner.
Au début de mon précédent message, je t'ai donné le lien suivant : http://dev.mysql.com/doc/refman/5.0/fr/ ... ff=nopfpls
Regarde, et tu trouveras comment transformer ton SELECT en INSERT SELECT

Re: Système de Ladder

par Bartsake » 22 mars 2013, 13:06

$bdd->query('SELECT * FROM table_lobby ORDER BY RAND () LIMIT 5')
Voilà la commande :) J'ai testé avec un fetch pour afficher etc, quand je refresh la page ca change bien le rand etc etc. J'ai essayé de refaire la même commande mais sans prendre en compte les valeurs déjà utilisées, pour afficher 2 équipes en rand sans retrouver le même joueur, mais ça coince..

Re: Système de Ladder

par zeus » 22 mars 2013, 11:05

Ok, alors je t'invite à lire cette documentation : http://dev.mysql.com/doc/refman/5.0/fr/ ... ff=nopfpls

En SQL, il est possible d'écrire des requêtes du type
INSERT (liste, des, champs)
SELECT liste, des, champs
FROM matble
Maintenant que pour la technique, tu vois que ce n'est pas compliqué, oublie un peu ça et pense à ton fonctionnel.
Que cherches-tu à faire ?
Tu cherches à prendre 5 utilisateurs au hasard, les transférer dans une table d'équipe, puis prendre les 5 autres, et les transférer dans l'autre table d'équipe

Du coup, si je pense algorithme, il faut que tu fasses :
  • Sélectionner 5 utilisateurs au hasard dans la table lobby, et les insérer dans la table equipe1
  • Sélectionner 5 utilisateurs de la table lobby qui ne sont pas dans la table équipe1 et les insérer dans la table equipe2
  • Vider la table lobby
Pour que tu avances, on va y aller par étape : commençons par sélectionner 5 utilisateurs au hasard dans la table lobby.
Si je reprend ta requête, tu n'en est pas loin, tu sélectionnes 5 utilisateurs, mais les 5 premiers, pas de notion de hasard.
En pensant "sélection aléatoire", je pense que tu trouveras ton bonheur ici : http://dev.mysql.com/doc/refman/5.0/fr/ ... tions.html

Commence par modifier ton SELECT pour répondre à ce besoin, puis nous passerons à l'étape d'après ;)

Re: Système de Ladder

par Bartsake » 21 mars 2013, 21:50

Merci de votre réponse

voilà ce que j'ai fais :
<?php // Config
$select1="SELECT * FROM table_lobby LIMIT 0, 5";
$select2="SELECT * FROM table_lobby LIMIT 5, 5";
$radiant=mysql_query($select1);
$dire=mysql_query ($select2);
$insert1="INSERT INTO table_radiant (userPoints, userID) SELECT (userPoints, userID) FROM $radiant";
$insert2="INSERT INTO table_dire (userPoints, userID) SELECT (userPoints, userID) FROM $dire";
$joueurs="int mysql_insert_id"
?>

<?php

try
{
    $bdd = new PDO('mysql:host=localhost;dbname=test', '*****', '***');
}
catch(Exception $e)
{
        die('Erreur : '.$e->getMessage());
}

if ($joueurs=10)
{
$bdd->exec($select1);
$bdd->exec($insert1);
$bdd->exec($select2);
$bdd->exec($insert2);
}
else
{
echo 'il manque des joueurs';
}
?>
Je tiens à dire que je suis ce qu'on pourrait largement appelé un néophyte, je ne connais que les bases (et pas parfaitement).
J'ai un doute sur la commande sql des $insert1 et $insert2 , je sais pas si on peut récupérer les données d'une variable comme ça...

Merci de votre aide.

Re: Système de Ladder

par zeus » 21 mars 2013, 10:39

Pour faire un INSERT SELECT, il faut que tu commences par écrire la requête SELECT qui va prendre 5 joueurs au hasard, qui ne sont pas déjà dans affecté à une équipe.

Essaye donc de commencer par là, quitte à nous demander de confirmer ce que tu écris, puis tu pourras facilement en faire un INSERT SELECT ;)

Système de Ladder

par Bartsake » 20 mars 2013, 12:05

Bonjour à vous,

Je suis actuellement en train de travailler sur un système de ladder pour un jeu qui se joue en 5vs5. Le principe est simple. L'utilisateur est enregistré avec un ID, un PSEUDO, des POINTS, un niveau d'autorisation (ban, membre, admin).
L'architecture en gros c'est d'abord la table lobby : une fois que l'utilisateur est loggé, il peut rejoindre le ladder > Création d'une entrée dans la table_lobby avec les 4 données, + un ID_Ladder, qui démarre à 0 en auto-incrément. Une fois ID_Ladder à 9, (donc 10 joueurs qui ont rejoint le lobby), je souhaite insérer aléatoirement ces 10 joueurs dans 2 tables différentes : équipe 1 et équipe 2, mais il faut qu'ils soient exactement 5 par équipe + supprimer les 10 entrées de la table_lobby >>>>>>>> C'est là que je bloque (pour insérer).
J'ai regardé pas mal de tutos/cours sur le net, et il semble que je doive utiliser INSERT FROM ou SELECT FROM, mais je n'arrive pas à écrire la commande SQL.

Quelqu'un aurait-il la solution ?

Merci d'avance pour votre aide, Cordialement