JeuWeb - Crée ton jeu par navigateur
Requete SQL - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Requete SQL (/showthread.php?tid=573)

Pages : 1 2


Requete SQL - Loetheri - 26-12-2006

Je voulais juste savoir si la requête suivante était correcte. Je ne sais pas encore la tester mais j'aurais aimé savoir si elle était déjà bonne.

Code :
UPDATE perso SET pm = pm - CASE
    WHEN (SELECT type FROM carte WHERE x = $_SESSION['x'] AND y = $_SESSION['y']) = 1
        THEN 1
    WHEN (SELECT type FROM carte WHERE x = $_SESSION['x'] AND y = $_SESSION['y']) = 2
        THEN 1
    WHEN (SELECT type FROM carte WHERE x = $_SESSION['x'] AND y = $_SESSION['y']) = 3
        THEN 2
    END
    WHERE id = $_SESSION['id']

Merci d'avance


RE: Requete SQL - pascal - 26-12-2006

ça a pas l'air mal, à priori, mais je tenterai plutôt:

Code :
UPDATE perso, carte SET perso.pm = perso.pm - CASE
WHEN carte.type = 1 OR carte.type = 2
THEN 1
WHEN carte.type = 3
THEN 2
END
WHERE id = $_SESSION['id'] AND
carte.x = $_SESSION['x'] AND carte.y = $_SESSION['y']

A+

Pascal


RE: Requete SQL - Loetheri - 26-12-2006

Je garde cela en mémoire. Et je te dis quoi quand tout sera en place ;-)

Si vous avez d'autres avis, n'hésitez pas ;-)


RE: Requete SQL - NicoMSEvent - 27-12-2006

Personellement, j'aurais d'abord traité le nombre de case que j'aurais enlevé, puis j'aurais fait ma requete SQL.

Tu vas utiliser quel type de base de données? MySQL? Quelle version?


RE: Requete SQL - Loetheri - 28-12-2006

Excuse-moi, je n'ai pas vu ta réponse.

Citation :Personellement, j'aurais d'abord traité le nombre de case que j'aurais enlevé, puis j'aurais fait ma requete SQL.
À vrai dire, je n'ai pas compris.

Sinon j'utilise MySQL. Pour l'instant, la version est la 5.0.27.

La requête SQL de pascaltje fonctionne comme il faut.


RE: Requete SQL - Loetheri - 28-12-2006

J'ai continué à coder. Je suis revenu sur ma petite requête SQL. Cependant, cela bloque :'(
Code :
UPDATE table_perso AS p SET p.pm =
        CASE
        WHEN (( p.pm - CASE
            WHEN table_carte.type = 1 THEN 1
            WHEN table_carte.type = 2 THEN 1
            WHEN table_carte.type = 3 THEN 2
            WHEN table_carte.type = 4 THEN 3
            END) > 0)
        THEN
            (p.pm - CASE
                WHEN table_carte.type = 1 THEN 1
                WHEN table_carte.type = 2 THEN 1
                WHEN table_carte.type = 3 THEN 2
                WHEN table_carte.type = 4 THEN 3
                END,
            p.x = p.x + $x, p.y = p.y + $y)
        ELSE
            p.pm
        END
        WHERE p.id = '".$_SESSION['id']."' AND table_carte.x = p.x AND table_carte.y = p.y

J'ai deux choix : soit je laisse ainsi et l'erreur vient du fait que je ne peux mettre deux tables après l'UPDATE (pas logique car cela fonctionnait) soit je l'enlève et il ne veut pas reconnaitre les clauses de WHEN en spécifiant la table.

Enfin, voilà


RE: Requete SQL - pascal - 28-12-2006

ça me parait bizarre de faire un alias sur le nom de la table à mettre à jour...

à ta place, j'essayerais avec les noms complets de tables:
Code :
UPDATE table_perso, table_carte SET ...

bon debuggage!

Pascal


RE: Requete SQL - Loetheri - 28-12-2006

J'ai fini par trouver Smile
Je ne dis pas que c'est la meilleure solution mais elle marche (chez moi).
Le problème se trouvait au niveau des CASE.
Pour l'alias, cela ne posait pas de problèmes avec ta première requête et cela n'en pose toujours pas.

Voici le code assez long :
Code :
UPDATE table_perso AS p, table_carte AS c
SET p.x =
    CASE  
        WHEN(p.pm - CASE
        WHEN c.type = 1 THEN 1
        WHEN c.type = 2 THEN 1
        WHEN c.type = 3 THEN 2
        WHEN c.type = 4 THEN 3
        END) >0
    THEN
        p.x + 1
    ELSE
        p.x
    END,
    p.y = CASE  
        WHEN(p.pm - CASE
        WHEN c.type = 1 THEN 1
        WHEN c.type = 2 THEN 1
        WHEN c.type = 3 THEN 2
        WHEN c.type = 4 THEN 3
        END) >0
    THEN
        p.y + 1
    ELSE
        p.y
    END,
    p.pm = CASE  
        WHEN(p.pm - CASE
            WHEN c.type = 1 THEN 1
            WHEN c.type = 2 THEN 1
            WHEN c.type = 3 THEN 2
            WHEN c.type = 4 THEN 3
            END) > 0
    THEN (p.pm - CASE
        WHEN c.type = 1 THEN 1
        WHEN c.type = 2 THEN 1
        WHEN c.type = 3 THEN 2
        WHEN c.type = 4 THEN 3
        END)
    ELSE
        p.pm
    END

WHERE p.id = 2 AND c.x = p.x AND c.y = p.y



RE: Requete SQL - Loetheri - 30-12-2006

Tant que je suis dans les requêtes, je voulais savoir une chose à propos de Jointure.

J'ai deux champs, des id, qui correspondent tous deux à des id de joueurs.
Je voudrais récupérer leur nom qui se trouve sur une autre table.
Mais je ne me souviens pas comment faire pour récupérer les deux noms.

Pour être concret, j'ai id_dest et id_env dans ma table de messages. J'ai id et nom dans ma table de joueur.

Voili, voilà Smile


RE: Requete SQL - Loetheri - 01-01-2007

J'ai trouvé ma réponse tout seul ...