|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Sébastien Perso Inscription : octobre 2010 Messages : 13 ![]() |
Bonjour,
Je rencontre un soucis pour une requête depuis hier et après plusieurs recherches sur google, je n'arrive toujours pas à solutionner cette énigme !! Voilà ma configuration : EaysyPhp installé sur mon poste avec donc MySQL 5.5.10 J'ai deux tables telles que : Table categorie id_categorie | intiule_categorie 1 | Faune & Flore 2 | Voyages 3 | Pauses longues 4 | Famille 5 | Sports Table appartenir id_photo | id_categorie 10 | 1 11 | 2 12 | 3 13 | 1 14 | 4 15 | 2 16 | 4 17 | 5 18 | 1 19 | 2 20 | 1 Les champs soulignés sont des clés primaires. La table appartenir fait la jonction entre mes tables photo et categorie, puisque une photo peut appartenir à 1 et plusieurs categorie et vice-versa. J'aurai besoin de répertorier les 3 dernières catégories de photo utilisées, puis dans un autre calque caché les autres restantes dans l'ordre alphabétique. J'ai besoin pour cela de récupérer l'ID des categories mais également leurs intitulés pour l'afficher sur la page. Le résultat de la ou des requêtes devrait donc être : 1(Faune & Flore), 2(Voyages), 5(Sports) ; les autres catégories dans l'ordre alphabétique. Pour cela la requête que j'utiliserai est donc : Code :
SELECT DISTINCT id_categorie FROM appartenir ORDER BY id_photo DESC LIMIT 0,3 J'utilise ORDER BY id_photo DESC puisque la table appartenir est alimentée au fur et à mesure des enregistrements de photos et des leurs catégories respectives. J'ai tenté une seconde requête mais sans résultat probant puisque j’obtiens une erreur Code :
#1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'"
Voilà ma requête : Code :
Je sèche arrivé à ce stade en ayant essayé des commandes telles que LEFT JOIN, INNER JOIN, EXISTS, ON.... bref j'ai besoin d'aide !!! Vous remerciant d'avance pour votre précieuse aide. |
||
|
|
00
|
|
|
#2 | ||
|
Membre habitué
![]() Robert LabrousseDéveloppeur décisionnel Inscription : février 2009 Messages : 79 ![]() |
Bonjour,
Pouvez-vous nous montrer ce que vous écrivez avec une simple jointure sur la table CATEGORIE. Si vous arrivez à afficher l'identifiant clé, il n'y a pas de raison que vous n'arriviez pas à jointer. Voici ce que intuitivement j'écrirais mais peut-être l'avez-vous déjà testée : Code :
|
||
|
|
10
|
|
|
#3 | ||||||
|
Invité de passage
![]() Sébastien Perso Inscription : octobre 2010 Messages : 13 ![]() |
Merci d'abord pour votre rapidité dans la réponse
Pour faire plus simple lors de l'explication du problème j'avais pris des valeurs d'exemples.. mais le résultat reste le même. Voilà précisément le script SQL avec la structure et contenance des tables citées. Code :
C'était juste un test sur PhpMyAdmin pour visualiser le résultat des requêtes. Toutefois, celui ci ressemblerait à ceci : Boucle tant qu'il y a de catégories cochées pour insérer dans la table appartenir l'ID de la photo en question, et l'ID de la catégorie concernée. Évidemment, il y aurait autant d'enregistrements que de catégories sélectionnées. Quant à la requête proposée, je pense l'avoir déjà testée puisque je me suis retrouvé avec le même résultat à un moment donné. Requête testée à l'instant avec ma base de données Le résultat est le suivant... : Code :
Code :
Merci d'avance ! |
||||||
|
|
00
|
|
|
#4 | ||
|
Membre confirmé
![]() Développeur informatique Inscription : avril 2011 Messages : 196 ![]() |
Moi je propose ceci :
Code :
et pour le deuxieme : |
||
|
|
20
|
|
|
#5 | ||||
|
Invité de passage
![]() Sébastien Perso Inscription : octobre 2010 Messages : 13 ![]() |
Génial cela fonctionne !!
Merci beaucoup pour votre aide !! Je ne savais même pas que l'on pouvait faire des sous requêtes dans une clause FROM, j'ai encore appris une chose Par contre pour complexifier un peu la chose j'aurai voulu savoir si je pouvais avoir en un seul résultat : Dans l'ordre, les 3 dernières catégories utilisées classées par ordre alphabétique, puis les autres restantes classées elles aussi dans l'ordre alphabétique ? Ou faut-il que je scinde en 2 requêtes bien distinctes ? J'ai déjà un élément de réponse avec Code :
Code :
Merci d'avance ! |
||||
|
|
00
|
|
|
#6 |
|
Membre confirmé
![]() Développeur informatique Inscription : avril 2011 Messages : 196 ![]() |
Ça m’étonnerait que tu puisses faire ce que tu veux en une seule requête, à la limite tu peux faire UNION entre tes deux requêtes.
|
|
|
00
|
|
|
#7 | ||||
|
Invité de passage
![]() Sébastien Perso Inscription : octobre 2010 Messages : 13 ![]() |
Merci encore Fabien pour ton aide !!
Je me suis résolu à faire deux requêtes distinctes pour mon script PHP. Par contre, pour finir j'ai encore un petit soucis. La requête suivante me donne les autres catégories de la table appartenir. Code :
J'ai testé la requête Code :
Comment pourrais-je avoir seulement les 3 autres restantes ? J'ai testé la commande WHERE id_categorie IN mais cela me ressort une erreur. Probablement puisque la colonne est nommée, et n'est pas une suite de valeurs uniquement. Une idée ? Merci d'avance pour vos réponses ! |
||||
|
|
00
|
|
|
#8 | |
![]() ![]() |
Peut-être que les solutions qu'on t'a proposées semblent fonctionner mais je doute !
Citation:
Sur la date de la photo ? Sur son identifiant ? Et si tu affectes après coup une catégorie à une photo déjà enregistrée depuis un certain temps, faut-il considérer cette catégorie comme étant la dernière utilisée ?
__________________
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
|
|
|
#9 |
|
Invité de passage
![]() Sébastien Perso Inscription : octobre 2010 Messages : 13 ![]() |
Que de bonnes questions CinePhil, auxquelles je n'avais pas vraiment pensé
Pour commencer, j'ai finalement changé d'avis pour la classement des catégories récentes. Celles-ci devront être classées dans l'ordre de leur dernière utilisation. Pour cela, c'est bon, j'ai réussi avec l'aide de Fabien. Il est vrai que mon premier choix de se baser sur l'ordre des ID des photos de la table appartenir n'est pas stable a priori. Puisque comme tu me l'as fait remarquer, si l'utilisateur ajoute une autre catégorie à une photo déjà référencée, cela ne sera pas bien géré. Je pense que je vais, au final, devoir ajouter une colonne DateTime dans la table appartenir. De là, je pourrai me baser sur ce critère pour avoir les dernières utilisées. Merci de m'y avoir fait pensé ! |
|
|
00
|
|
|
#10 | ||
![]() ![]() |
Citation:
Mais tu y réponds plus loin avec la bonne solution : Citation:
Regarde cette source pour avoir les trois premiers éléments par catégorie et inspire t'en pour avoir tes trois dernières catégories utilisées. Bonne chance et poste nous ta requête qu'on voie si on peut l'améliorer.
__________________
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 ! |
||
|
10
|
Copyright © 2000-2012 - www.developpez.com