|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : février 2008 Messages : 55 ![]() |
Bonjour,
Ma demande est très simple, c'est juste que ca fait longtemps que je ne touche plus de sql et que je me retrouve un peu perdu pour un rien. Voici la table en question: ---------------- table_test ---------------- id_a id_b ---------------- Voici quelques tuples présents dans cette table: 1-301 1-303 1-229 1-609 1-708 2-301 2-609 3-766 3-555 3-301 3-909 3-123 3-777 J'aimerai trouver la requete qui me permet de trouver tous les id_a tel que ses id_b contiennent au moins les valeurs 301 et 609. Ici il devrait me retourner l'id 1 et 2 mais pas le 3 car il ne contient que l'id_b de valeur 301. J'avais fait ceci mais ca ne marche pas : Code :
Merci pour votre aide... |
||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() |
Bonjour,
Cette requête marchera s'il n'existe pas de doublon de couple id_a,id_b dans table_test : Code :
__________________
www.nudge.org Surveillez et optimisez vos applications Java |
||
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : février 2008 Messages : 55 ![]() |
Merci pour ta réponse =)
En effet les couples id_a et id_b sont uniques. Une toute derniere question et je serai comblé ! Voila en fait j'aimerai rajouter une condition... En fait la vrais requete serait: Trouver tous les id_a tel que ses id_b contiennent au moins les valeurs 301 et 609 et au moins une de ces trois valeurs: 303 ou 229 ou 708 . Ca devrait me retourner id_a = 1 Voila si j'ai la réponse à ca je serait comblé !!!! Merci beaucoup pour l'aide précieuse |
|
|
00
|
|
|
#4 | ||
![]() ![]() |
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
|
|
|
#5 | ||
|
Invité de passage
![]() Inscription : février 2008 Messages : 55 ![]() |
Merci beaucoup !!! Vraiment génial
Par contre avant de mettre en résolu, c'est juste que j'aimerai savoir a titre personnel si je fais ceci: Code :
Je cherche tous les id_a tel que ses id_b contiennent au moins les valeurs 301 et 609 et SEULEMENT une de ces trois valeurs: 303 ou 229 ou 708 . C'est bien ca ? |
||
|
|
00
|
|
|
#6 | ||
![]() ![]() |
Non, il faut faire un nouveau regroupement et un comptage :
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
|
|
|
#7 |
|
Invité de passage
![]() Inscription : février 2008 Messages : 55 ![]() |
Ok merci
Mais ca doit être vraiment lourd là :s Sinon j'ai remarqué que si je voulais rajouter une condition à la requete mais basé sur des champs d'une autre table je ne pouvais pas ajouter de table dans la requete.... Où dois je rajouter table_test_b, ma jointure et ma condition toute bete comme And table_test_b.id = 3. Désolé je ne pensais pas que j'aurai besoin de tout ca :s Je pense qu'après cette question j'aurai tout ce dont il me faudra pour finir mon site web Merci encore, j'aime pas déranger :/ |
|
|
00
|
|
|
#8 | |
![]() ![]() |
Si ta BDD est bien modélisée et bien indexée et si tu n'as pas à traiter des dizaines de millions de lignes, ça devrait passer comme une lettre à la poste.
Citation:
Ainsi que l'éventuel message d'erreur ou résultat erroné obtenu ?
__________________
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
![]() Inscription : février 2008 Messages : 55 ![]() |
D'accord
En fait oui j'aurai peut etre des millions de lignes à traiter :/ gros probleme ? Sinon ma requete est un peu plus complexe, je vais aller plutot droit au but car je voulais ne pas t'embéter avec de longues requetes et puis me débrouiller tout seul avec les bases que tu m'avais fournis mais bon je n'y parviens pas du tout. En fait mon site sera une sorte de "moteur de recherche" et il y aura donc des tas de critères avec possibilité ou non de faire une recherche exact. Ma table_test est une table de liaison et lie donc une table contenu plein d'objets qui ont chacun les mêmes propriétés mais qui peuvent ne pas avoir les memes valeurs. Voici donc trois tables (plus concrètes que table_test_a) : ---------------- table_couleur ---------------- id_couleur nomCouleur proprieteCouleur codeCouleur ... etc ---------------- ---------------- table_liaison ---------------- id_objet id_couleur ---------------- ---------------- table_objet ---------------- id_objet nom autonomie fiche url ... image ---------------- Le truc c'est que je risque d'avoir des gens qui demanderont ce genre de requête (je te donne la plus compliqué que je puisse trouver selon moi): Je cherche tous les objets (de table_objet) qui sont cnstitués obligatoirement des trois couleurs d'id_couleur 1,4,8 et qui contiennent aussi obligatoirement une seule de ces couleurs de la liste suivante: 122,143 ET obligatoirement une seule couleur de cette liste : 398,765,454,333 PUIS que l'autonomie (de la table table_objet) soit égale à 120. Voila :/ La requete que j'ai fait suite à ton aide a été la suivante: Code :
Bon meme moi je comprends pourquoi ca ne marche pas...syntaxiquement c'est archi faux mais comme je ne travaille jamais avec les GROUP BY et HAVING je dois dire que pour une fois je suis bien embêté... As tu compris ma "vraie" demande ? Merci beaucoup pour ton aide parce que seul je n'y arriverai pas. Pourtant j'essaye encore et toujours... |
||
|
|
00
|
|
|
#10 | |||||||||||||||
![]() ![]() |
Citation:
Citation:
Code :
Citation:
Code :
Citation:
Code :
Citation:
Code :
Code :
Et comme tout ça ne manipule que des entiers de colonnes indexées, même avec des millions de lignes, le temps de réponse devrait être satisfaisant.
__________________
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
|
|
|
#11 | ||
|
Invité de passage
![]() Inscription : février 2008 Messages : 55 ![]() |
Merci beaucoup
Cela dit une erreur apparait : #1054 - Unknown column 't4.id_liaison' in 'on clause' Un autre vrai probleme est de savoir comment construire automatiquement ce genre de requete en PHP... parce qu'il pourrait tres bien y avoir 10 listes avec a chaque fois le choix sur un seul id présent dans ces listes... J'ai donc décidé de traiter cette requete en deux temps... Je m'occuperai donc juste de la partie permettant de trouver tous les id. (sans prendre en compte la jointure pour le parametre autonomie). Ainsi j'ai essayé ceci mais ca ne marche pas : Code :
Je ne veux pas du tout me faire passer pour quelqu'un qui n'est jamais content mais y a t-il moyen de supprimer certain alias que tu as mis et qui seraient inutiles ? Si ca peut aider à en supprimer il faut savoir qu'en fait les champs ont tous des libelles différents. Ainsi id_objet de la table table_liaison s'appelle en réalité id_objet_liaison et id_couleur de la table table_liaison s'appelle id_couleur_liaison. De plus serais tu formuler la meme requete mais avec des jointure moins complexes ? Dans le sens ou au lieu d'utiliser INNER JOIN, utiliser simplement la syntaxe FROM table1,table2 WHERE table1.id = table2.id ? Je ne sais pas si tu vois ce que je veux dire mais en fonction des champs sélectionnés mes requetes seront générés en PHP et donc il faut que ce soit le plus court possible (et donc sans utiliser d'alias si possible) :/ Je sais que j'en demande beaucoup mais c'est pas tous les jours que je serai embêté par un tel probleme. Ca fait deux jours que mon developpement s arrété à cause d'une requete SQL que je ne parvient pas à formuler et a adapter en PHP ... Merci pour ta réponse et encore désolé si je semble trop vouloir en demander |
||
|
|
00
|
|
|
#12 | ||||||||||||||
![]() ![]() |
Citation:
Tu es sûr de l'avoir bien recopiée ? Citation:
Citation:
Citation:
Citation:
Code :
![]() Citation:
Citation:
À toi d'adapter mon code aux vrais noms ! Et les alias n'ont rien à voir avec les noms de colonnes puisque ce sont des alias pour les noms des tables ou pour les sous-requêtes. Citation:
Citation:
Citation:
Tu vends des patchworks ou quoi ?
__________________
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
|
|
|
#13 | |
|
Invité de passage
![]() Inscription : février 2008 Messages : 55 ![]() |
Tout d'abord encore merci pour tes réponses.
Non je ne vends pas ca... lol Disons que c'est assez confidentiel et que je ne peux pas donner la vraie structure de mes tables. Concernant la nouvelle structure c'est peut etre mieux niveau SQL mais disons que moi je dois les générer avec du PHP, j ai une page script hyper complexe et en fonction du formulaire qui m'est renvoyé par un submit, je dois construire la requete... sauf qu'avec tous ces alias je ne peux malheureusement pas le faire. En fait je vais décomposer la requête en deux fois. Donc en premier lieu (et c'est simplement ca que je voudrai savoir en fait :p) la requête que j'ai formulé précédemment sans prendre en compte la condition portant sur l'autre table... Citation:
Concernant l'erreur c'était de ma faute, j'ai mal adapté ton script Je suis vraiment embété par ta structure. Tout en restant "moderne" peut-on éviter une jointure dans le FROM ? Et faire une jointure dans le WHERE ? (meme en utilisant le JOIN si u veux :p). C'est juste que ca simplifierait énormément mon script PHP et pour tout dire ca le rendrait "réalisable" |
|
|
|
00
|
|
|
#14 | ||||||
![]() ![]() |
Citation:
Code :
Code :
Citation:
Si tu ne peux dévoiler le domaine confidentiel sur lequel tu travailles, essaie de trouver une analogie. Il existe plein d'objets multicolores. Quel est le processus qui justifie ces contraintes sur la requête ? Parce qu'avec 3 regroupements imbriqués, les performances devraient encore être acceptables mais si tu en as potentiellement une dizaine, ça risque de devenir problématique. Je m'absente tout le week-end donc prochaine réponse lundi. Ça te laisse le temps de réfléchir. A+
__________________
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
|
|
|
#15 | |
|
Invité de passage
![]() Inscription : février 2008 Messages : 55 ![]() |
Ok pour la syntaxe normalisée, si elle est bien mieux performante alors pourquoi pas
Et concernant les regroupements imbriqués il pourrait y en avoir 10 au maximum... Je sais bien que cela fait beaucoup mais je n'ai pas d'autres choix, hélas. Citation:
- couleurs - bleu bleu1 bleu2 bleu3 bleu4 vert vert1 vert2 rouge rouge1 rouge2 rouge3 rouge4 rouge5 rouge6 jaune jaune1 jaune2 orange orange1 orange2 orange3 orange4 L'idée c'est que si l'utilisateur choisi ces valeurs: bleu, vert3,jaune,orange5 Il est donc évident de penser que l'utilisateur désirerait voir n'importe quel bleu et jaune dans son objet car il a spécifier une catégorie... Donc la requête formulée devrait être: Je cherche un objet étant composé de ces deux couleurs obligatoirement: vert3 et orange5, puis qui contiennent une des valeurs de cette liste (bleu1,bleu2,bleu3,bleu4) et une des valeurs de cette liste (jaune1,jaune2). Je vais regarder ca durant tout ce week end, merci et bon week end ! |
|
|
|
00
|
|
|
#16 | ||||
![]() ![]() |
Citation:
Citation:
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
|
|
|
#17 |
|
Invité de passage
![]() Inscription : février 2008 Messages : 55 ![]() |
Salut,
J'étais absent pendant pas mal de jours. Je vais valider ce topic ! Merci énormément pour ton aide ! A bientot ! |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com