Problème de type dans une requête SQL - SQL/NoSQL - Programmation
MarshPosté le 05-07-2006 à 11:49:59
Bonjour à tous
Je développe un forum et cherche en ce moment à coder la fonction qui permet à l'utilisateur de distinguer les forums lus de ceux qu'il n'a pas encore lu
J'ai réfléchi et ai trouvé (tout seul comme un grand ) la solution qui me paraît être la meilleure : (dans mes exemples, 1 désigne l'id du membre en cours)
* Quand un visiteur visite un forum, on ajoute son id dans un champ f_read de la table forums (pareil pour les sujets) -> Concrètement, ça donne :
Code :
UPDATE forums SET f_read = f_read + ', 1' WHERE f_id = 3
-> Ce qui donnera à terme quelque chose du genre f_read = '123, 54, 1, 2, 48, 87987, 654' (bien entendu, dès qu'un membre poste dans le forum, je vide ce champ )
* Ensuite, pour lister les forums, on fait une condition qui regarde si l'id du membre est dans la liste :
Code :
SELECT [...] CASE WHEN 1 IN (f_read) THEN '1' ELSE '0' END AS f_read
... et j'affiche mes belles icones lu / non lu
Seulement voilà, je fais directement appel au champ f_read dans ma requête (avec IN (f_read) ) et MySQL me renvoie toujours 0 même quand mon id est dans le champ
Je pense que c'est parce qu'il interprète mon champ comme du texte (et l'entoure donc avec des guillemets) et non comme une "suite de nombres séparés par des virgules" ...
En effet, la requête suivante marche parfaitement :
Code :
SELECT [...] CASE WHEN 1 IN (123, 54, 1, 2, 48, 87987, 654) THEN '1' ELSE '0' END AS f_read
Ce qu'il faudrait, c'est convertir le contenu du champ en un format ("suite de nombres" ) que MySQL comprendrait, mais je sèche...
Marsh Posté le 05-07-2006 à 11:49:59
Bonjour à tous
Je développe un forum et cherche en ce moment à coder la fonction qui permet à l'utilisateur de distinguer les forums lus de ceux qu'il n'a pas encore lu
J'ai réfléchi et ai trouvé (tout seul comme un grand ) la solution qui me paraît être la meilleure :
(dans mes exemples, 1 désigne l'id du membre en cours)
* Quand un visiteur visite un forum, on ajoute son id dans un champ f_read de la table forums (pareil pour les sujets)
-> Concrètement, ça donne :
-> Ce qui donnera à terme quelque chose du genre f_read = '123, 54, 1, 2, 48, 87987, 654'
(bien entendu, dès qu'un membre poste dans le forum, je vide ce champ )
* Ensuite, pour lister les forums, on fait une condition qui regarde si l'id du membre est dans la liste :
... et j'affiche mes belles icones lu / non lu
Seulement voilà, je fais directement appel au champ f_read dans ma requête (avec IN (f_read) ) et MySQL me renvoie toujours 0 même quand mon id est dans le champ
Je pense que c'est parce qu'il interprète mon champ comme du texte (et l'entoure donc avec des guillemets) et non comme une "suite de nombres séparés par des virgules" ...
En effet, la requête suivante marche parfaitement :
Ce qu'il faudrait, c'est convertir le contenu du champ en un format ("suite de nombres" ) que MySQL comprendrait, mais je sèche...
Des idées ?
---------------
Viendez sur le Newbie-Project et essayez le Newbie-Directory (nouveau)