Prendre les resultat de 10 à 20

payetonju Messages postés 436 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 2 juillet 2014 - 24 juil. 2012 à 16:39
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 - 25 juil. 2012 à 13:37
Bonjour,

J'ai une requete SQL (pilotes ODBC) qui fonctionne, mais je voudrais que celle-ci puisse afficher les resultats de 10 à 20 (pur exemple).
$sql = "SELECT * FROM caracteristiques_produits WHERE  ";
$sql.= "codeproduit LIKE '%".$result."%' OR designation LIKE '%".$result."%'  OR carte_mere LIKE '%".$result."%' OR processeur LIKE '%".$result."%' ";
$sql.= " OR processeur_pres LIKE '%".$result."%' OR ram LIKE '%".$result."%' OR ram_pres LIKE '%".$result."%' OR hdd LIKE '%".$result."%' ";
$sql.= " OR hdd2 LIKE '%".$result."%' OR hdd_pres LIKE '%".$result."%' OR lecteur LIKE '%".$result."%' OR lecteur_pres LIKE '%".$result."%' ";
$sql.= " OR reseau LIKE '%".$result."%' OR video LIKE '%".$result."%' OR video_pres LIKE '%".$result."%' OR son LIKE '%".$result."%' ";
$sql.= " OR connections_internes LIKE '%".$result."%' OR connections_externes LIKE '%".$result."%' OR boitier LIKE '%".$result."%' ";
$sql.= " OR dimensions LIKE '%".$result."%' OR os LIKE '%".$result."%' OR os_pres LIKE '%".$result."%' OR clavier LIKE '%".$result."%' ";
$sql.= " OR souris LIKE '%".$result."%' OR autres LIKE '%".$result."%' OR options_pres LIKE '%".$result."%' OR descriptif LIKE '%".$result."%' ";
$sql.= " OR lien LIKE '%".$result."%' OR lien_img_pres LIKE '%".$result."%' OR lien_img LIKE '%".$result."%' OR alt_img LIKE '%".$result."%' ";
$sql.= " OR meta_keywords LIKE '%".$result."%' OR meta_description LIKE '%".$result."%' ORDER BY designation LIMITE 9";
$res=odbc_exec($connect, $sql);


Je sais que SELECT TOP 10 affiche les 10 premiers, LIMIT 10,20 à la fin de la requête devrait m'afficher la requête voulue mais il y a une erreur, je me suis dit que j'ai dû faire une erreur de syntaxe mais je ne vois vraiment pas où, selon les tutoriels.

Il me met l'erreur suivante : "Warning: odbc_exec() [function.odbc-exec]: SQL error: [Microsoft][ODBC SQL Server Driver][SQL Server]Syntaxe incorrecte vers 'LIMIT'., SQL state 37000 in SQLExecDirect in C:\wamp\www\zefzfefez.php on line 155"

Pouvez-vous m'aider svp ?

Merci beaucoup.

Ju'

3 réponses

cs_jopop Messages postés 1540 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 1 août 2013 12
25 juil. 2012 à 08:33
Salut,

l'utilisation de TOP ou LIMIT dépend du SGBD, par exemple Oracle fonctionne avec TOP et MySQL avec LIMIT. Et de souvenir le TOP ne permet pas de récupérer une "fourchette" qui ne débuterait pas au premier enregistrement. Il faudra donc utiliser des astuces, comme décrit ici.
0
payetonju Messages postés 436 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 2 juillet 2014 4
25 juil. 2012 à 12:17
Hello !

Merci de ta réponse.
Effectivement je ne connaissais pas. Alors si j'ai bien compris (sous réserve, lol) le principe, avec ma requête cela donne ceci :

$Var = 25;
$sql = "SELECT TOP ".$Var." * FROM caracteristiques_produits WHERE  ";
$sql.= "codeproduit LIKE '%".$result."%' OR designation LIKE '%".$result."%'  OR carte_mere LIKE '%".$result."%' OR processeur LIKE '%".$result."%' ";
$sql.= " OR processeur_pres LIKE '%".$result."%' OR ram LIKE '%".$result."%' OR ram_pres LIKE '%".$result."%' OR hdd LIKE '%".$result."%' ";
$sql.= " OR hdd2 LIKE '%".$result."%' OR hdd_pres LIKE '%".$result."%' OR lecteur LIKE '%".$result."%' OR lecteur_pres LIKE '%".$result."%' ";
$sql.= " OR reseau LIKE '%".$result."%' OR video LIKE '%".$result."%' OR video_pres LIKE '%".$result."%' OR son LIKE '%".$result."%' ";
$sql.= " OR connections_internes LIKE '%".$result."%' OR connections_externes LIKE '%".$result."%' OR boitier LIKE '%".$result."%' ";
$sql.= " OR dimensions LIKE '%".$result."%' OR os LIKE '%".$result."%' OR os_pres LIKE '%".$result."%' OR clavier LIKE '%".$result."%' ";
$sql.= " OR souris LIKE '%".$result."%' OR autres LIKE '%".$result."%' OR options_pres LIKE '%".$result."%' OR descriptif LIKE '%".$result."%' ";
$sql.= " OR lien LIKE '%".$result."%' OR lien_img_pres LIKE '%".$result."%' OR lien_img LIKE '%".$result."%' OR alt_img LIKE '%".$result."%' ";
$sql.= " OR meta_keywords LIKE '%".$result."%' OR meta_description LIKE '%".$result."%' 
$sql2 = $sql;
$sql.= " AND (".$sql2.") ";
$sql.= " ORDER BY designation";
$res=odbc_exec($connect, $sql);


Mais non ça ne marche pas. Il râle sur le ORDER BY. J'enlève donc le ORDER BY et là il râle sur le fait qu'il manque une ")"... Aurais-je mal compris ?

Merci.

Ju'
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
25 juil. 2012 à 13:37
Salut,

2 solutions simple pour faire cela :

En Sql-Server, il suffit d'utiliser la fonction ROW_NUMBER() et sa clause OVER
Cela crée un compteur de lignes ordonné selon l'order by choisi.

Exemple avec une table UTILISATEURS contenant les champs IDUTIL, NOMUTIL, PRENOMUTIL


/* Solution 1 : Avec une sous-requete */
SELECT refTable.* 
FROM 
(
SELECT 
ROW_NUMBER() OVER(ORDER BY u.IDUTIL ASC) as 'MY_ROW_NUMBER',
u.IDUTIL, 
u.NOMUTIL, 
u.PRENOMUTIL
FROM 
UTILISATEURS u
WHERE 
u.IDUTIL between 548 and 9999
) refTable
WHERE 
refTable.MY_ROW_NUMBER between 10 and 20



/* Solution 2 : Avec une VUE temporaire */
WITH MY_VIEW_TMP as
(
SELECT 
ROW_NUMBER() OVER(ORDER BY u.IDUTIL ASC) as 'MY_ROW_NUMBER',
u.IDUTIL, 
u.NOMUTIL, 
u.PRENOMUTIL
FROM 
UTILISATEURS u
WHERE 
u.IDUTIL between 548 and 9999 -- un filtre
)
/* Suffit de requéter avec le between 10 and 20 sur le résultat déjà trié */
SELECT * FROM MY_VIEW_TMP WHERE MY_ROW_NUMBER between 10 and 20


bye...
0
Rejoignez-nous