Je veux donner 100 pts à tout les joueurs comment faire ?

On3x Messages postés 163 Date d'inscription   Statut Membre Dernière intervention   -  
jee pee Messages postés 41521 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

j'ai une base de donnée sql, "betacraft" avec dedans une table "cms_membres" avec ses options là (dans l'ordre)
id, session, rang, pseudo, prenom, nom, passe, email, date, heure, oublie, ip, token, ddate, dheure

et je voudrais enfaite mettre la valeur 100 pour tout les id dans le champ token
et si possible ne pas donner les 100 si y'a plusieurs fois des membres qui ont la même ip

est ce que c'est possible ? du moins pour le premier svp
et comment faire

merci d'avance
@+

3 réponses

ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
'lut, ça se fait en une requête:
UPDATE betacraft.cms_membres SET token = token + 100

En revanche pour les IP identiques c'est plus compliqué, pas infaisable mais il faut y réfléchir:
- l'IP peut être dynamique et j'imagine que tu stockes la dernière IP connue, or une personne peut venir avec une IP n°1, changer en IP n°2, ne pas revenir avec, et un autre joueur peut avoir eu l'IP n°1 entre temps.
- à quel compte donner dans le cas d'IP identiques?
from human import idiocy
del idiocy
0
On3x Messages postés 163 Date d'inscription   Statut Membre Dernière intervention   8
 
Salut, tout dabord merci pour la première requête :)
Enfaite, si jamais les ip sont identiques (je veux juste vérifier si jamais il y a 2 ip pareils, après les autres options j'oublie) je ne donne des token à celui qui a l'id le plus proche de 0

Ex : Benjamin est le 144 membre et possède l'id 144
il a voulu se créer un 2e compte directement à la suite et celui ci possède l'id 145

dans la requête benjamin recevra les 100 tokens, mais pas son 2e compte avec la même ip

est ce que je suis clair :p ?
0
On3x Messages postés 163 Date d'inscription   Statut Membre Dernière intervention   8
 
up
0
jee pee Messages postés 41521 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 
Salut,

Une requete comme celle là devrait ne sélectionner qu'un membre par ip

SELECT MIN(id) FROM betacraft.cms_membres GROUP BY ip

Et donc pour la mise à jour faire :

UPDATE betacraft.cms_membres SET token = token + 100
WHERE id IN (SELECT MIN(id) FROM betacraft.cms_membres GROUP BY ip)

Cdlt

        Un étranger, c'est un ami qu'on n'a pas encore rencontré.
0
On3x Messages postés 163 Date d'inscription   Statut Membre Dernière intervention   8
 
merci bcp !
il faudra que j'apprenne le sql :p

@+
0
On3x Messages postés 163 Date d'inscription   Statut Membre Dernière intervention   8
 
ça m'a mis ça :/
#1093 - You can't specify target table 'cms_membres' for update in FROM clause
0
jee pee Messages postés 41521 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 
Je comprends le message, il ne veut faire faire une maj sur lui même.

Je n'utilise pas mysql, mais oracle où une telle requete doit marcher.

On va faire en 2 temps, créer une table temporaire qui stocke les id, puis utiliser cette liste pour la mise à jour.

CREATE TABLE betacraft.temp_id AS 
SELECT MIN(id) AS id FROM betacraft.cms_membres GROUP BY ip

UPDATE betacraft.cms_membres SET token = token + 100
WHERE id IN (SELECT id FROM betacraft.temp_id)
0