Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/08/2011, 02h56   #1
Membre régulier
 
Avatar de Goldocrack
 
Inscription : novembre 2002
Messages : 120
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : novembre 2002
Messages : 120
Points : 83
Points : 83
Par défaut MAX d'un LIMIT

Bonjour à tous

Je cherche à récupérer dans ma bdd un par un les fichiers (en fait à la demande de l'utilisateur) par ordre décroissant, j'ai donc (avec une variable php) :

Code :
" SELECT fichier FROM tablefichier ORDER BY fichierId DESC LIMIT $numeroFichier,".($numeroFichier+1)
Cette requête fonctionne. L'utilisateur peut décider de voir le fichier d'avant (jusqu'à aller à -1 ou le limit s'auto-limite de lui-même et ça c'est parfait : LIMIT -1, 0)
MAIS peut aussi demander de voir les fichiers suivants, c'est là que ça coince : comment faire pour que mon LIMIT ne dépasse pas le nombre de fichier dans la table (sans passer par le php svp, donc sans connaître le MAX ou le COUNT à l'avance) ???

Merci
__________________
  • Un langage de programmation est censé être une façon conventionnelle de donner des ordres à un ordinateur. Il n'est pas censé être obscur, bizarre et plein de pièges subtils (ça ce sont les attributs de la magie). [Dave Small]
  • Un programme c'est un sort que l'on jette à un ordinateur et qui se transforme en messages d'erreur.
  • Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse.

et ne sont pas des options...
Goldocrack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 19h00   #2
Membre régulier
 
Inscription : décembre 2008
Messages : 64
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 64
Points : 87
Points : 87
Bonjour,

Tu dis que cette requête fonctionne, en es-tu sûr ?

A mon avis, si $numerofichier vaut 4, le select va te renvoyer 5 records en partant du 5ieme record du select (s'il y en a au moins 10 bien sûr)
Donc ta requête devrait plutôt être :
Code :
"SELECT fichier FROM tablefichier ORDER BY fichierId DESC LIMIT $numeroFichier,".'1'
si numerofichier part de 0 pour le 1er record
Si tu es au bout, la requête ne renverra rien, il suffit donc de tester le retour me semble t-il.


Cordialement
semaphore1984 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 19h04   #3
Membre régulier
 
Avatar de Goldocrack
 
Inscription : novembre 2002
Messages : 120
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : novembre 2002
Messages : 120
Points : 83
Points : 83
Effectivement ma requête fonctionne.

Quand tu demandes un LIMIT 0, 30 tu demandes les réponses de 0 à 30. Si je demande $numero, $(numero+1) j'aurais alors 1 seul résultat à partir de mon numéro.
C'est en fait comme si je demandais un id avec WHERE id=$numero mais pour des raisons diverses, je n'ai pas d'id de ce type int autoincrement simple

Je vais voir si je peux tester mon résultat avant de valider le retour.
__________________
  • Un langage de programmation est censé être une façon conventionnelle de donner des ordres à un ordinateur. Il n'est pas censé être obscur, bizarre et plein de pièges subtils (ça ce sont les attributs de la magie). [Dave Small]
  • Un programme c'est un sort que l'on jette à un ordinateur et qui se transforme en messages d'erreur.
  • Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse.

et ne sont pas des options...
Goldocrack est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2011, 20h37   #4
Modérateur
 
Inscription : octobre 2008
Messages : 1 508
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : octobre 2008
Messages : 1 508
Points : 2 040
Points : 2 040
Citation:
Envoyé par Goldocrack Voir le message
Si je demande $numero, $(numero+1) j'aurais alors 1 seul résultat à partir de mon numéro.
Non car le 2eme argument de LIMIT est le nombre maximum de résultats attendu, voir la doc de LIMIT. Dans ton cas ça devrait donc être 1 et non pas $numero+1.

Ceci dit, si ton programme php ne lit que la première ligne de résultats ça revient au même, c'est juste que des données inutiles sont transférées.
estofilo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/08/2011, 15h17   #5
Membre régulier
 
Avatar de Goldocrack
 
Inscription : novembre 2002
Messages : 120
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : novembre 2002
Messages : 120
Points : 83
Points : 83
Effectivement, autant pour moi...

J'utilise toujours un while pour récupérer mes résultats mais un " return " peu visible trainait par là...


Pour mon problème qui reste, j'aimerais vraiment éviter le test APRES la requête, car si le résultat est vide, alors il faut que je relance une autre requête qui récupère le ($numero-2).

Pire : si un imb*** demande le $numero = 60 et que ma table s'arrête à 10, je vais boucler pendant un moment, surcharger mon serveur (grosses données à récupérer à chaque fois).

Merci.
__________________
  • Un langage de programmation est censé être une façon conventionnelle de donner des ordres à un ordinateur. Il n'est pas censé être obscur, bizarre et plein de pièges subtils (ça ce sont les attributs de la magie). [Dave Small]
  • Un programme c'est un sort que l'on jette à un ordinateur et qui se transforme en messages d'erreur.
  • Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse.

et ne sont pas des options...
Goldocrack est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h33.


 
 
 
 
Partenaires

Hébergement Web