Page 1 sur 1

je cherche la requete adéquate !

Posté : 13 août 2005, 14:53
par metalfire77
Bonjour,

Je vous explique mon problème, j'ai crée une page dans laquelle s'afficche une liste d'animes, lorsque je cliques sur un de ces titres, j'affiche dans une autre page la fiche de l'anime en question ainsi que deux boutons: "suivant" et "precedent" !
je souhaite pourvoir faire en sorte que l'appui sur le bouton "suivant" provoque l'affichage dans la page de la fiche de l'anime dont le titre vient alphabétiquement juste après celui qui est affiché actuellement, de meme celui qui vient juste avant pour le bouton précédent...

J'ai donc dans ma table "anime" un champs "titre" qui me permet de seclectionner dans la base mysql l'anime ciblé, voici le code ke j'utilise pour sectionné toutes les données relatives a l'anime ciblé et les afficher dans la fiche correspondante:
$data =mysql_db_query("animecentral","select  titre, genre, studio, membre, date, synopsis, annee, note, cover, type, url_fansub, site_officiel, statu, id, nbr_note from anime where titre LIKE '$actual_anime' ");
   list ($titre,$genre,$studio,$posteur,$date,$synopsis,$annee,$note,$cover,$type,$url_fansub,$site_officiel,$statu,$id,$nbr_note) = mysql_fetch_row($data);
   parse("titre",$titre);
   parse("genre",$genre);
   parse("studio",$studio);
   parse("posteur",$posteur);
   parse("date",$date);
   parse("synopsis",$synopsis);
   parse("annee",$annee);
   parse("note",$note);
   parse("cover",$cover);
   parse("type",$type);
   parse("url_fansub",$url_fansub);
   parse("site_officiel",$site_officiel);
   parse("statu",$statu);
   parse("id",$id);
   parse("nbr_note",$nbr_note);
Je souhaites donc inclure une requete qui me permetterait en meme temps d'obtenir dans 2 variables distinctes les titres des animes venant par ordres alphabetique respectivement avant et apres l'anime dont le titre correspond a la valeur de la variable "actual_anime" afin de pouvoir affecter ces valeurs aux boutons "suivant" et "precedent" qui se trouvent dans ma page.

J'ai reflechi a de multiples solutions mais n'en ai trouvé aucune qui fonctionne faute de connaitre la fonction php ou sql qui correspondrait a ce ke je veux faire!

Quelqu'un saurait-il comment je dois proceder? je desespere de pourvoir trouver la solution !
Je vous remercie d'avance pour votre aide :wink:

Posté : 13 août 2005, 15:06
par Cyrano
Ajoute un clause ORDER BY titre dans ta requête SQL

Posté : 13 août 2005, 15:21
par metalfire77
Ajoute un clause ORDER BY titre dans ta requête SQL
merci de ton interet Cyrano mais je pense ke tu na pas du lire mon post jusqu'au bout, en aucun cas une clause order by ne me permetrait de selectionner le tuple suivant et le tuple precedant une fois la totalité des tuple classés par ordre alphabétique, de plus ma requete n'a qu'un seul résultat, aucun classement n'est donc necesaire, je te remercie qd meme d'avoir tenté m'aider !

Quelqu'un d'autre aurait une idée ?

Posté : 13 août 2005, 16:13
par Cyrano
Rien ne t'empèche de sortir tous les résultat et de les stocker dans un tableau, dans une variable de session par exemple : dans ce cas, la clause ORDER BY se justifierait pleinement en plus d'accélérer le fonctionnement général puisqu'il n'y aurait pas une requête à chaque changement de page.

Sinon, le truc consiste à avoir des liens avec un paramètre indiquant quelle requête effectuer. Paramètre que tu récupères s'il existe en début de fichier pour paramétrer ta requête. Avec un ORDER BY et une clause LIMIT, tu pourrais aller chercher précisément la ligne souhaitée, sachant que la première ligne est la ligne 0 dans ta table et en limitant la sortie à 1. Le premier aura donc un LIMIT 0,1 et selon le paramètre envoyé en url par le lien [Suivant] ou [Précédent], tu incrémentes ou décrémentes le premier chiffre.

Posté : 13 août 2005, 17:02
par metalfire77
je te remercie, cependant faire un tableau est bcp trop complexe pour moi, je ne maitrise pas cette fonction et ce serait bcp trop contraignant etant donné la stucture de mon site (il s'agit d'un site en flash mais les requetes se font dans des scripts php et sont les meme que pour un site full php, c'est pourkoi je ne l'ai aps precisé plus haut).

Pour la deuxieme solution, c'est celle que j'avais pensé utiliser en tout premier lieu, c celle ki me paraissait le plus logique a premiere vu mais qd on se penche de pres sur la question on se rend compte qu'il manque un parametre indispensable, c'est a dire ke pour limiter le resulat a (0,1), il faudrait que je connaisse le numéro de tuple attribué a l'anime actuellement affiché ds le classement alpabétique pour pouvoir limiter la recherche a celui d'avant ou a celui d'apres, or je crois kil n'existe aucune fonction qui me permette d'obtenir ce numero, on se trouve donc bloqué, de plus meme si je pouvais obtenir ce numero il faudrait pour obtenir l'anime precedent que je decremente le chiffre Zero (je dis peut etre une connerie masi il ne me semble pas ke ce soit possible, a moins kon puisse avoir des chiffres négatifs, je ne sais pas je n'ai jamasi essayé).

Je reconnais que c'est un problème très difficile a comprendre quand on est pas ds le contexte, c 'est pour cela que j'ai essayé de l'expliquer au mieux

Posté : 13 août 2005, 18:32
par Ripat
Pourquoi ne fais-tu pas ta requête sur les trois 'anime' pour ensuite les récupérer dans une boucle classique avec mysql_fetch_array().

Code : Tout sélectionner

SELECT titre, genre, etc.... FROM anime WHERE titre LIKE '$previous_anime' OR titre LIKE '$actual_anime' OR titre LIKE '$next_anime'

Posté : 13 août 2005, 18:34
par Cyrano
... il faudrait que je connaisse le numéro de tuple attribué a l'anime actuellement affiché ...
Ça ne t'a pas sauté aux yeux, mais tu l'as ce numéro dans le paramètre de l'url.
<?php
//...
$anim_en_cours = isset($_GET['anim']) ? $_GET['anim'] : 0;
//...
$sql = "SELECT ...... LIMIT ". $anim_en_cours .", 1";
//...
?>

Posté : 13 août 2005, 19:05
par metalfire77
merci pour vottre aide, j'ai résolu le probleme, c t bcp plus simple que ce ke je croyais, il me manquait juste le caractère">" ou "<" a inserer ds la requete, je ne savais pas ke l'on pouvait faire des comparaison superieur ou inferieur avec des chaines de caracteres autre que numériques, g trouvé la réponse sur un autre forum, c t tout con mais fallait y penser, voila le code pour ceux ke ca interesserait:
   $data =mysql_db_query("animecentral","select  titre, genre, studio, membre, date, synopsis, annee, note, cover, type, url_fansub, site_officiel, statu, id, nbr_note from anime WHERE titre LIKE '$actual_anime'");
   list ($titre,$genre,$studio,$posteur,$date,$synopsis,$annee,$note,$cover,$type,$url_fansub,$site_officiel,$statu,$id,$nbr_note) = mysql_fetch_row($data);
   parse("titre",$titre);
   parse("genre",$genre);
   parse("studio",$studio);
   parse("posteur",$posteur);
   parse("date",$date);
   parse("synopsis",$synopsis);
   parse("annee",$annee);
   parse("note",$note);
   parse("cover",$cover);
   parse("type",$type);
   parse("url_fansub",$url_fansub);
   parse("site_officiel",$site_officiel);
   parse("statu",$statu);
   parse("id",$id);
   parse("nbr_note",$nbr_note);

   $data1 =mysql_db_query("animecentral","select  titre from anime where titre > '$actual_anime' ORDER BY titre ASC LIMIT 1 ");
   list ($titre_suiv) = mysql_fetch_row($data1);
   parse("titre_suiv",$titre_suiv);

   $data2 =mysql_db_query("animecentral","select  titre from anime where titre < '$actual_anime' ORDER BY titre DESC LIMIT 1 ");
   list ($titre_prec) = mysql_fetch_row($data2);
   parse("titre_prec",$titre_prec);
merci a Taum pour avoir trouvé la solution et merci aux autres pour avoir essayé, je suis vraiment soulagé, ca fait un moment ke je me prenais la tete avec ca !
Merci aussi a cyrano pour sa patioence et pour m'avoir fait découvrir la fonction isset, je suis sure que cela me servira a l'avenir, j'en prend note !

Pour voir le résultat rendez vous a cette adresse: http://animecentral.free.fr dans la section anime en haut a droite de chaque fiche