cs_SkyCrasher
Messages postés143Date d'inscriptionsamedi 4 janvier 2003StatutMembreDernière intervention19 mai 2015
-
6 mai 2015 à 20:05
cs_SkyCrasher
Messages postés143Date d'inscriptionsamedi 4 janvier 2003StatutMembreDernière intervention19 mai 2015
-
6 mai 2015 à 21:09
Bonjour,
J'ai besoin d'aide pour l'utilisation d'une requête SQL LIMIT avec OFFSET je n'obtient jamais le résultat dont j'ai besoin.
En français:
- Requête 1: Je prends les données d'une actus par l'id reçu avec la méthode GET par l'URL.
- Requête 2: J'affiche l'id précédent de la base de données.
Exemple si id URL = 12 et que l'id inférieur présent est 10. Je veux afficher ce 10.
- Requête 3: J'affiche l'id suivant de la base de données.
Exemple si id URL = 12 et que l'id supérieur présent est 15. Je veux afficher ce 15.
Je n'arrive pas à utiliser les LIMIT avec OFFSET correctement même en utilisant un ORDER BY.
Il me faut quelque chose comme:
ORDER BY id ASC LIMIT 1 OFFSET idurl;
et
ORDERBY id DESC LIMIT 1 OFFSET idurl;
Mais cela ne donne pas le résultat escompté.
Le codage:
$dbid=$_GET['id']; //INITIALISATION $DBIDPREMIER $sqlactus6 = "SELECT * FROM xactus WHERE id='".$dbid."'"; $reqactus6 = mysql_query($sqlactus6) or die('Erreur SQL !<br>'.$sqlactus6.'<br>'.mysql_error()); while($data = mysql_fetch_assoc($reqactus6)) { $dbidpremier=$data['id']; echo $dbidpremier; }
$sqlactus3 = "SELECT * FROM xactus WHERE id='".$_GET['id']."'"; $reqactus3 = mysql_query($sqlactus3) or die('Erreur SQL !<br>'.$sqlactus3.'<br>'.mysql_error()); while($data = mysql_fetch_assoc($reqactus3)) { $dbid=$data['id']; $dbclassement=$data['classement']; $dbdatedujour=$data['datedujour']; $dbtitre=$data['titre']; $dbarticle=$data['article']; $dbcategorie=$data['categorie']; $dblinkimage=$data['linkimage']; echo $dbidpremier; //AFFICHER
NHenry
Messages postés15069Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention29 mai 2023158 6 mai 2015 à 20:23
Il te faut 3 requêtes en effet :
- Une avec l'id exacte (pas besoin de LIMIT
- Pour la ligne d'avant, requête SQL en filtrant les entrées dont l'ID est inférieur à celui demande (12 dans ton cas) en tirant par ordre descendant et en ne prenant que le premier item.
- Pour la ligne d'après, similaire à la précédente, mais tout les ID supérieur à celui demandé et trier par ordre croissant.
la valeur passé au LIMIT est toujours une constante dans les 2 cas (pas de variable).
cs_SkyCrasher
Messages postés143Date d'inscriptionsamedi 4 janvier 2003StatutMembreDernière intervention19 mai 2015 6 mai 2015 à 20:44
Bonjour,
Je n'avais pas pensé au filtre.
Car j'arrive aux résultats mais il passe 20 fois dans la boucle, donc 20 résultats au lieu d'un.
Et pour le filtre auriez-vous une idée ?
cs_SkyCrasher
Messages postés143Date d'inscriptionsamedi 4 janvier 2003StatutMembreDernière intervention19 mai 2015 6 mai 2015 à 20:55
Il me faut encore un peu d'aide pour la LIMIT.
C'est:
LIMIT 1, $dbidurl;
ou
LIMIT $dburl, 1;
ou
LIMIT 1 OFFSET $dburl,
ou
LIMIT $dburl OFFSET 1;
???
--
NHenry
Messages postés15069Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention29 mai 2023158 6 mai 2015 à 21:02
Il ne faut pas que l'Id de l'item aille dans la clause LIMIT, c'est la clause WHERE quii fait le filtrage et ORDER BY qui met l'item en avant.
Pour la syntaxe, ça se trouve rapidement sur un moteur de recherche.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_SkyCrasher
Messages postés143Date d'inscriptionsamedi 4 janvier 2003StatutMembreDernière intervention19 mai 2015 6 mai 2015 à 21:09
J'ai compris.
ORDER BY ASC LIMIT $dbidurl;
Premier élément j'affiche sinon j'affiche rien
ou
ORDER BY DESC LIMIT $dbidurl;
Premier élément j'affiche sinon j'affiche rien
Merci