ElMoustiko Posté 10 Janvier 2005 Posté 10 Janvier 2005 Salut tout le monde, j'ai un problème un peu technique (je trouve). J'ai une table mysql contenant un tas de truc (des films en l'occurence avec id, titre, ...), je gère une liste des films et au click sur le titre du film j'arrive à la fiche du dit film avec comme clé pour la requete, l'id du film $req = mysql_query("SELECT `id`, `titre`, `...le tas de truc dont on a pas besoin pour le problème...` FROM `films` WHERE `id`=".$_GET['film_id']); Donc jusqu'ici tout va pour le mieux. Maintenant, ce que j'aimerais faire, c'est sélectionner la ficher suivant et la fiche précédente, y a qu'à incrémenter ou décrémenter $_GET['film_id'] me direz vous, mais non parceque la vie est compliquée, je veux le film suivant par ordre alphabétique et le film précédent par ordre alphabétique aussi, et l'ordre des id et l'ordre alphabétique n'a rien à voir Donc, je sais pas trop comment faire :s J'imaginais un truc du genre $req = mysql_query("SELECT `id`, `titre`, `...le tas de truc dont on a pas besoin pour le problème...` FROM `films` ORDER BY `films` LIMIT ".$_GET['film_id']-1, $_GET['film_id']+1); Mais là je pense que ça sélectionne l'id-1 et l'id+1 (et encore même pas sûr que ça marcherais) et non film-1 et film+1. Bien sûr si ça marchait, il faudrait ensuite tester que l'on est pas sur la fiche du premier film ni du dernier film mais allons y étapes par étapes Si vous aviez une idée de la marche à suivre, pas forcément d'une solution toute cuite dans le bec (à vrai dire, je préfèrerais pas du tout !!). Là je calle Merci d'avoir pris le temps de lire le problème déjà, vous voulez un aspirine ? @++
Titag Posté 10 Janvier 2005 Posté 10 Janvier 2005 (modifié) Salut, Pourquoi ne pas faire deux requètes ? La première servirait à determiner si il y a un film précédent et la deuxième à determiner s'il existe un suivant. Elles seraient du genre : $req = "select film_id FROM films where id<".$_GET['film_id']." LIMIT 1"; Si la requete te retourne un résultat tu n'a plus qu'a faire un lien sur la page avec le bon id. Et pareil pour le film suivant. A tester Modifié 10 Janvier 2005 par Titag
ElMoustiko Posté 10 Janvier 2005 Auteur Posté 10 Janvier 2005 J'aurais pas dû parler du "problème" du premier élément et du dernier Ca je verrais plus tard En fait le soucis c'est que justement les suivant/precedant ne sont PAS basé sur l'ID, je cherche à récupérer l'entrée suivante par ordre alphabétique.
Dan Posté 10 Janvier 2005 Posté 10 Janvier 2005 Combien de livres as-tu ? Parce qu'à mon sens il serait peut-être envisageable de faire une première requête sur l'intégralité de la table et ne stocker que les id dans un tableau. Dans la mesure où la requête fait un "ORDER by titre", les numéros seraient triés alphabétiquement par titre. Une fois là, il est facile de rechercher le précédent ou suivant de la chaîne, comme il est facile de déterminer premier et dernier. Dan PS: par exemple, sur la base du Hub, en faisant une recherche des id des membres triés alphabétiquement par nom, la requête prend, sous phpmyadmin : Affichage des enregistrements 0 - 29 (4025 total, traitement: 0.0009 sec.) Cela me semble donc jouable
Bug Posté 10 Janvier 2005 Posté 10 Janvier 2005 En SQL, il n'y a pas par hasard une instruction permettant de creer une vue (CREATE VUE) de ta table triée par ordre alpha avec tous les éléments dont tu as besoin ? Il suffit ensuite de faire ta requète sur ta vue au lieu de ta table principale. Ne pas oublier de détruire ta vue (DROP VUE) à un moment ou à un autre. C'est faisable sur gros système sur des bases DB2, je ne sais pas pour MySQL ... à voir.
ElMoustiko Posté 10 Janvier 2005 Auteur Posté 10 Janvier 2005 Là c'est pas pour des livres, c'est pour une liste de films, actuellement j'ai environ 100 entrées ça augmentera au fur et à mesure. Y a pas moyen de faire ce que tu proposes mais avec un LIMIT centré à la valeur de l'id ? (genre LIMIT ".$_GET['film_id'].-1.", ".$_GET['film_id'].+1." ) Sinon, pour résumer, je selectionne toutes les entrées de la table avec une premiere requete et ensuite ??? on peut récupérer le rang de l'entrée ?? Je vois mal comment on peut le récupérer :s Le truc de Bug à l'air interessant, mais j'ai des doutes quand aux capacité de mysql à ce niveau là.
ElMoustiko Posté 11 Janvier 2005 Auteur Posté 11 Janvier 2005 Bon, un copain de net m'a trouvé la soluce ! Merci solo, t'es un champion $reqNext = mysql_query("SELECT `id`, `titre` FROM `films` WHERE `titre` > '".$data->titre."' ORDER BY `titre` ASC LIMIT 0, 1"); // suivant$reqPrev = mysql_query("SELECT `id`, `titre` FROM `films` WHERE `titre` < '".$data->titre."' ORDER BY `titre` DESC LIMIT 0, 1"); // prec$dataNext = mysql_fetch_object($reqNext);$dataPrev = mysql_fetch_object($reqPrev);
ElMoustiko Posté 11 Janvier 2005 Auteur Posté 11 Janvier 2005 Quelle honte, j'ai oublié de vous remercier de vous être penché sur le problème :s Puissiez vous m'en excuser Nan mais sans rire, merci d'avoir jeté un oeil au problème A charge de revanche.
Anonymus Posté 11 Janvier 2005 Posté 11 Janvier 2005 Bonjour, pour Create Vue, il s'agit de Create View : http://dev.mysql.com/doc/mysql/fr/CREATE_VIEW.html Pour ta requète, ou plutot 'tes' requètes, tu aurais, en même temps que tu met un lien pour le film en cours, de mettre (dans le tabeau) un lien vers le film précédent, et le film suivant. Pourquoi ? Cela te donnerait du même coup les 3, et t'éviterait des accès répétés à la base. Sinon, tu peux rassembler les 3 requètes, et en faire une seule, qui ira chercher l'id correspondant au film, ainsi que l'id précédent, et l'id suivant.
Bug Posté 11 Janvier 2005 Posté 11 Janvier 2005 pour Create Vue, il s'agit de Create View Bah, J'étais pas si loin que ça vu que ça fait bien 14 ans que j'ai pas potassé les fonctions avancées de SQL
ElMoustiko Posté 11 Janvier 2005 Auteur Posté 11 Janvier 2005 J'ai pas trop compris comment c'était possible de faire ça Anonymus En gros, tu me dis de passer en paramètre d'url les 3 id des 3 films consécutif ?? Je vois pas trop comment regrouper ça en une seule requete :/ Sinon, c'est assez léger je trouve comme types de requetes, mais si c'est optimisable, je suis pour
Thanh Posté 13 Janvier 2005 Posté 13 Janvier 2005 Hello à tous, pour les vues vérifies que ta version de MySQL le permet ;-)
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant