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

Fermé
On3x Messages postés 164 Date d'inscription mardi 20 septembre 2011 Statut Membre Dernière intervention 2 mars 2020 - 13 juin 2014 à 18:15
jee pee Messages postés 40463 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 20 novembre 2024 - 17 juin 2014 à 00:18
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 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 228
Modifié par gravgun le 13/06/2014 à 18:28
'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 164 Date d'inscription mardi 20 septembre 2011 Statut Membre Dernière intervention 2 mars 2020 8
13 juin 2014 à 20:31
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 164 Date d'inscription mardi 20 septembre 2011 Statut Membre Dernière intervention 2 mars 2020 8
15 juin 2014 à 23:09
up
0
jee pee Messages postés 40463 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 20 novembre 2024 9 421
Modifié par jee pee le 16/06/2014 à 01:46
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 164 Date d'inscription mardi 20 septembre 2011 Statut Membre Dernière intervention 2 mars 2020 8
16 juin 2014 à 09:25
merci bcp !
il faudra que j'apprenne le sql :p

@+
0
On3x Messages postés 164 Date d'inscription mardi 20 septembre 2011 Statut Membre Dernière intervention 2 mars 2020 8
16 juin 2014 à 23:11
ç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 40463 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 20 novembre 2024 9 421
Modifié par jee pee le 17/06/2014 à 00:18
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