payetonju
Messages postés436Date d'inscriptionmercredi 26 septembre 2007StatutMembreDernière intervention 2 juillet 2014
-
24 juil. 2012 à 16:39
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 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"
cs_jopop
Messages postés1540Date d'inscriptionlundi 26 mai 2003StatutMembreDernière intervention 1 août 201312 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.
payetonju
Messages postés436Date d'inscriptionmercredi 26 septembre 2007StatutMembreDernière intervention 2 juillet 20144 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 ?
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 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