Aller au contenu

Afficher suivant / précédent


ElMoustiko

Sujets conseillés

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 :D

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 :D

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 :nono:

Merci d'avoir pris le temps de lire le problème déjà, vous voulez un aspirine ?

@++

Lien vers le commentaire
Partager sur d’autres sites

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é par Titag
Lien vers le commentaire
Partager sur d’autres sites

J'aurais pas dû parler du "problème" du premier élément et du dernier :D 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.

Lien vers le commentaire
Partager sur d’autres sites

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 ;)

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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à.

Lien vers le commentaire
Partager sur d’autres sites

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);

Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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 :)

Lien vers le commentaire
Partager sur d’autres sites

J'ai pas trop compris comment c'était possible de faire ça Anonymus :blush:

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 ;)

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...