JeuWeb - Crée ton jeu par navigateur
Problème tout bête - 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 : Problème tout bête (/showthread.php?tid=1467)

Pages : 1 2


RE: Problème tout bête - naholyr - 14-07-2007

C'est simplement parce que ton champ "cibles" est une chaine, donc MySQL la traite comme telle. Ta requête correspondrait donc à
Code PHP :
<?php 
'SELECT titre, text FROM messagerie WHERE '.$id_joueur.' IN ("1,2,3")'
Ce qui n'est absolument pas équivalent à
Code PHP :
<?php 
'... IN (1,2,3)'
Pour que ça marche il faudrait d'abord faire un select, extraire `cibles`, et le réinjecter pour construire la requête. Je pense qu'on peut difficilement s'en sortir sans une gross boucle, et ça devient assez lourd.


RE: Problème tout bête - Maegia - 14-07-2007

Hum... Pas bête ! Merci beaucoup champion ! Wink


RE: Problème tout bête - Haiken - 15-07-2007

La solution crade qui marcherait c'est :

Code PHP :
<?php 
mysql_query
('SELECT titre, text FROM messagerie ' .
'WHERE (cibles="$id_joueur") ' .
'OR (cibles like "$id_joueur,%") ' .
'OR (cibles like "%,$id_joueur,%") ' .
'OR (cibles like "%,$id_joueur") ' .
'ORDER BY date DESC')
(y'a sans doute moyen avec un regexp aussi)

Pour la solution propre, cf naholyr Wink



Edit(naholyr) : sauts de ligne dans le code pour ne pas déformer la mise en page


RE: Problème tout bête - elazard - 15-07-2007

ca c'est carrement plus violent que la solution d'origine xD


RE: Problème tout bête - naholyr - 15-07-2007

Bah elle est pas mal la solution d'Haiken, ça mériterait d'être comparé, parce que je suis pas sûr qu'une ou deux regexp coûte plus cher qu'une jointure…


RE: Problème tout bête - Haiken - 15-07-2007

ah non faut oublier tout de suite, le regexp c'est un full table scan il me semble ! (tout comme mes 'like or like')
Imagine les dégâts !
Si tu met un index sur la colonne il ne va parcourir que l'index, mais sur un index textuel, pour une table qui risque d'être assez grosse (je parle par expérience), c'est le suicide assuré :rip:


RE: Problème tout bête - naholyr - 15-07-2007

Haiken a écrit :Si tu met un index sur la colonne il ne va parcourir que l'index, mais sur un index textuel, pour une table qui risque d'être assez grosse (je parle par expérience), c'est le suicide assuré :rip:
C'est noté Wink En fait je n'ai jamais tenté le coup sur ce genre de tables, donc je n'en avais aucune idée Tongue


RE: Problème tout bête - Mysterarts - 15-07-2007

La fou croit qu'il sait tout,
Le sage sait qu'il ignore.
Snif

Mysterarts, qui se remet à flooder... mince