Opération binaire et 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 : Opération binaire et SQL (/showthread.php?tid=780) |
Opération binaire et SQL - Seren - 09-02-2007 Pour gérer les différents états d'un personnage, je compte créer un champ unique et ensuite utiliser des masques. Par exemple, en binaire : Assommé --> status = 0000 0001 Empoisonné --> status = 0000 0010 En php ça donne : Code PHP :
par exemple. Code PHP :
Voilà, là je suis super content du système (que j'ai pas du tout inventé ). Par contre là je commence à réfléchir au requête SQL associé. Il va falloir utiliser des opération binaires comme condition ! Apparament c'est possible en utilisant &. Miracle ! // Selectionnez tous les personnages assommés. SELECT * FROM perso WHERE (status & STUNNED) Par contre, là ou j'ai très peur c'est au niveau vitesse de traitement des requêtes. En effet, je vois toujours des requêtes ou on compare des égalités, différence etc. Je suppose que c'est assez rapide à traiter. 1. Est-ce que quelqu'un utilise des opérations binaires ? 2. Est-ce que ça va tellement ramer qu'il faut tout réimplémenter ? PS : Après une reflexion de trente seconde, je ferais assez peut de selection basé sur le statut du personnage. A part peut être pour vérifier la mort du personnage. ( La mort est considéré comme un état.. définitif. ) PPS : j'ai réediter mon post parce qu'a la base je pensais que & n'existait pas en mySQL et qu'il fallait utiliser une fonction BITAND() qui finallement est un truc uniquement pour SQL... Je laisse juste mon poste parce que j'ai passé dix minutes a le taper et que ça peut intéresser des gens peut être... RE: Opération binaire et SQL - gtsoul - 09-02-2007 merci pour le système, j'en cherchais un du même genre. Je le teste des que je peux je viens de lire dans la doc de mysql, que les jointures étaient en fait des opérations binaires. En fait c'est supralogique (au sens mathématique) : SELECT * FROM table1, table2 WHERE p_key = f_key <=> table1.p_key & table2.f_key Donc si il peut le faire sur des chaines de caractères, je ne vois pas pourquoi il ramerait plus sur de simples booléens, en supposant que l'interprétation du masque ne pose pas trop de temps. RE: Opération binaire et SQL - Seren - 09-02-2007 gtsoul a écrit :merci pour le système, j'en cherchais un du même genre. Je le teste des que je peux En fait ma question sur le fait que ça rame ça date de mon ancien post. En PL/SQL il faut utiliser une fonction, j'avais peur qu'un appel de fonction dans une condition puisse ralentir le bazar. genre SELECT * FROM TABLE WHERE BITAND(status, DEAD). Mais je suis d'accord qu'au niveau machine faire un & ou un |, c'est aussi voir plus rapide qu'une comparaison style =, <, >. (A priori un & binaire est beaucoup plus rapide qu'un = sur deux chaines de caractères.) RE: Opération binaire et SQL - Shudrum - 09-02-2007 D'accord avec gtsoul, excellent ce système, faut que je m'y colle RE: Opération binaire et SQL - Raoull - 09-02-2007 Bien vu ! J'utilisais le même principe en vb6 avec un calcul sur les bits dans des variables, et c'est vrai que c'est très pratique pour stocker des états, mais j'ai jamais pensé à utiliser ca avec php/mysql. Maintenant au niveau performance, j'ai à vari dire aucune idée mais je pense pas que ce soit vraiement lourd. Au pire faire des tests en chronométrant RE: Opération binaire et SQL - barst - 09-02-2007 Je cherchais un principe similaire pour mes PNJ afin d'exprimer plusieurs états en même temps. Ca me plait ce système |