|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 19 ![]() |
Bonjour,
pour mon forum de discussion, sur mon site, je voudrais faire apparaître les sujets qui traient d'un objet particulier (qu'on peut rechercher par la fonction recherche). En l’occurrence, il s'agit de trouver les discussions sur l'amandier, si on va sur la page de qui parle de cet arbre. en local cette requête ci-dessous marche bien, mais elle ne fonctionne pas sur le serveur (1 et 1) : Code :
en attendant, j'ai mis une autre forme plus simple de requête, visible par ex sur cette page : http://www.lesarbres.fr/amandier.html c'est à "Voir les sujets du forum sur cet arbre" merci pour votre aide |
||
|
00
|
|
|
#2 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 954 ![]() |
LIMIT n'existe pas en SQL, ni dans SQL Server. C'est un truc spécifique à MySQL.
Si tu veut retourner un ensemble précis il faut utiliser les fonctions de ranking de la norme SQL comme ROW_NUMBER. A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 19 ![]() |
désolé, je n'ai pas été clair mais c'est du Mysql
que j'utilise sur un site en php mais si le reste des instruction est commun au sql je veux bien avoir une aide sur le reste, sans parler du limit je précise que ma requête marche sur mon serveur local (apache), mais ne marche pas sur le serveur distant. je suppose qu'il faut décomposer la requête avec des résultats temporaires, mais je ne sais pas le faire. |
|
00
|
|
|
#4 | |
![]() ![]() |
Toi, tu as besoin d'un cours sur les jointures !
Citation:
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
|
|
00
|
|
|
#5 |
![]() ![]() ![]() Cédric DuprezInscription : avril 2002 Messages : 3 823 ![]() |
Pas seulement MySQL... PostgreSQL utilise aussi la clause LIMIT, par exemple.
__________________
Rédacteur / Modérateur SGBD Mes tutoriels et la FAQ MySQL ---------------------------------------------------- Pensez aux balises code et au tag Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
|
|
|
00
|
|
|
#6 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 954 ![]() |
Désolé, je croyais être sur le forum SQL !!!!
LIMIT existe effectivement sous MySQL, mais pas dans le langage SQL ! Et cela fait partit des "trucs" non relationnels qui relèvent quelques pièges.... A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/ Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp. Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation * * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * * |
|
00
|
|
|
#7 | |||||
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 19 ![]() |
Citation:
la requête donne bien un résultat en local mais sur le serveur distant, le résultat est= 0 je suppose qu'il faut décomposer en 3 étapes et 3 requêtes et stocker les résultats intermédiaires temporaires. le schéma est le suivant : Code :
Code :
|
|||||
|
00
|
|
|
#8 | ||
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 19 ![]() |
Bonjour
je cherche toujours , sur une autre voie cette fois : j'ai fait des jointures sur une partie de requête : Code :
à moins que ce dysfonctionnement ne vienne du serveur (1&1) qui ne tolère pas les requêtes imbriquées donc merci aux aides, si quelqu’un a une idée |
||
|
00
|
|
|
#9 | ||
![]() ![]() |
Avec des jointures propres, ça devrait donner ça :
Code :
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework... « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française ! Linuxiens, comptez-vous ! |
||
|
00
|
|
|
#10 | ||
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 19 ![]() |
Merci beaucoup cinePhil
j'ai juste rajouté DISTINCT Code :
(je n'avais pas mis le '%' de%match_word% car il y est dans le match_word ; ça vient de phpbb) le résultat est sur cet exemple http://www.lesarbres.fr/amandier.html ("Voir les sujets du forum sur cet arbre") Maintenant je vais potasser l'instruction JOIN que je ne connaissais pas, pour comprendre. encore merci |
||
|
00
|
|
|
#11 | ||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
DISTINCT associé à LIMIT ne me semble pas forcément le meilleur choix.
L'idée derrière LIMIT est de ramener le plus rapidement possible les X premières lignes, mais DISTINCT à l'inverse nécessite de comparer toutes les lignes de la requête pour retirer les doublons du résultat. Par contre LIMIT nécessite l'utilisation d'ORDER BY, sinon plusieurs exécutions de la requête peuvent ramener des résultats différents. Peut être que cette requête sera mieux niveau perf (si elle correspond toujours niveau résultat), en tout cas il faut utiliser le ORDER BY : Code :
|
||
|
|
00
|
|
|
#12 | ||
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 19 ![]() |
bonjour skuatamad,
j'ai complété avec ORDER et DESC ta requête marche en local et pas sur le serveur de 1&1, du coup je suis resté sur l'autre solution. ou bien je pourrais enlever le LIMIT et n'afficher que les 10 premiers résultats, mais je n'ai pas réussi à le faire (qchose du genre $i=1 ; et $i+; mais je n'ai pas su où mettre le condition $i<10) Code :
|
||
|
00
|
|
|
#13 | ||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Citation:
Citation:
|
||
|
|
00
|
|
|
#14 |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
SAluton,
La version de MySQL chez 1&1 supporte-t-elle les sub-select ?
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof articles : Comment émuler un tableau croisé [quasi] dynamique et : Une énigme mathématique résolue avec MySQL recommande l'utilisation de PDO (PHP5 Data Objects) |
|
00
|
|
|
#15 |
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 19 ![]() |
bonjour,
je ne sais pas si 1&1& supporte les subselect et pour répondre à skuatamad, il n y a pas de message d'erreur mais aucun affichage. Comment puis-je récupérer l'erreur ? |
|
00
|
|
|
#16 | ||||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Citation:
Code :
Via le prompt mysql ? via phpmyadmin ? ou via ton appli ? Si c'est via l'appli il est probable que 1&1 n'affiche aucun message d'erreur...c'est une prod après tout. Mais peut être que via phpmyadmin tu pourrais avoir le message. Citation:
|
||||
|
|
00
|
|
|
#17 | ||
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
As tu consaté en local un réel gain de perf ? parce que sinon rien ne sert de se prendre la tête...l'élément important de mon post était qu'il faut utiliser ORDER BY avec LIMIT.
Sinon tu sembles faire une requête de type recherche dans le forum, as tu envisagé un index FULL-TEXT avec MATCH ? Plutôt que de trier sur le topic_id, tu pourrais bénéficier d'un poids (la pertinence du résultat) La requête pourrait être quelque chose comme : Code :
|
||
|
|
00
|
|
|
#18 |
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 19 ![]() |
je suis allé sur phpmyadmin et j'ai mis la requête que tu m'as donnée :
le résultat est : version() 4.0.27-max-log en prod, sur mon site exécuté par le serveur, je n'ai pas de message d’erreur et aucun affichage de résultat de la requête. |
|
00
|
|
|
#19 |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
Je crois que MySQL ne supporte les sub-select qu'à partir de la version 4.1
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof articles : Comment émuler un tableau croisé [quasi] dynamique et : Une énigme mathématique résolue avec MySQL recommande l'utilisation de PDO (PHP5 Data Objects) |
|
00
|
|
|
#20 |
|
Invité de passage
![]() Inscription : novembre 2006 Messages : 19 ![]() |
d'accord, cela expliquerait que 1&1 ne fasse pas les subselect ;
en tout cas merci pour cette discussion, j'ai appris les jointure et je viens de transformer d'autres requêtes. Dommage que depuis 10 ans je m’embêtais sans cela (je recopiais dans mes tables, par ex de photos d'arbres - où il y a + de 3.000 lignes - , le nom français, le nom anglais, le nom latin, les fiches descriptives dans les 2 langues alors que j’ai aussi une table qui a les correspondances de noms et fiches). je vais regarder la solution avec MATCH, mais telle quelle ta proposition de requête donne une erreur. je vais essayer d’approfondir le full-text, histoire d'apprendre de nouvelles fonctions. |
|
00
|
Copyright © 2000-2012 - www.developpez.com