|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Inscription : février 2011 Messages : 11 ![]() |
Bonjour à tous,
J'écris ce petit mot car j'ai un petit soucis de requête. Pour un besoin x, j'ai codé une requête qui fonctionne très bien, générée dynamiquement par php. Hors je me suis décidé à ajouter un paramètre supplémentaire qui fait que la requête ne fonctionne plus. Voilà le code : Code :
[...] Code :
Auriez vous une idée ? Merci par avance. Cdt, Tux |
||||
|
|
00
|
|
|
#2 |
|
Membre chevronné
![]() Inscription : juin 2004 Messages : 747 ![]() |
Il va falloir que tu nous montres ce qu'il y a entre les 2, ça vient sûrement de qu'il y a avant le 'OR' ....
__________________
|
|
00
|
|
|
#3 | ||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 707 ![]() |
Salut
- Soit tu répète la condition autant de fois que c'est nécessaire sur "prolongation" tout en respectant la structure de la requête. Moins pratique à mon sens. - Soit, (ce qui me semble mieux car ça offrira plus de souplesse quand on crée une requête dynamique) tu éclate les choses selon la structure de la requête. Exemple : Code :
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
||
|
|
00
|
|
|
#4 | ||||
|
Invité de passage
![]() Inscription : février 2011 Messages : 11 ![]() |
Pour faire plus court je vais afficher les deux requêtes.
Le premier choix qui fonctionne : Code :
Code :
J'avais pensé à INNER JOIN gm_complet AS co sans ON mais ça ne fonctionne pas :/ Le passage intermédiaire de la requête a toujours fonctionné et est indépendant si je puis dire de mon problème. Cette partie manquante est assez conséquente, mais si ya vraiment besoin, je la poserai également. Cdt |
||||
|
|
00
|
|
|
#5 | ||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 707 ![]() |
Code :
Mais le "co.complet" cause problème dans la 2ème condition, la table "gm_complet" ne s'y trouve pas, or, dans ton exemple elle s'y trouve dans les 2 cas. Faut faire le point la dessus. Soit ce champ/clause, il ne faut pas rajouter dans ce cas là, soit ce champ "complet" peut être exploiter autrement, faut voir.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
||
|
|
00
|
|
|
#6 | ||
|
Invité de passage
![]() Inscription : février 2011 Messages : 11 ![]() |
Je suis navré RunCodePhp mais j'ai énormement de mal à procéder comme tu le fait. Ma requête étant assez monstrueuse, je suis pas sur de pouvoir adapter ta méthode à la requête.
Une petite question tout de même, peut être que ça eclairera sur le problème. J'ai lu sur une page sql qu'il était possible d'accéder à deux tables de cette façon : Code :
ou encore un INNER JOIN tout simple ? Je pose ces questions car je suis pas sûr d'avoir saisi le principe de l'accès multiples aux tables, malgré avoir réussi à avoir un résultat jusqu'à présent. Merci par avance. Petit edit : lorsque que j'ai linké les requetes SQL choix 1 et 2, j'ai involontairement inversé les deux, ce qui permettra de mieux comprendre l'erreur de l'absence de déclaration de table manquante. |
||
|
|
00
|
|
|
#7 | |||
|
Expert Confirmé
![]() Inscription : janvier 2010 Messages : 2 707 ![]() |
Citation:
Dans les code sObjets (POO) on retrouve très souvent le même principe, ce n'est pas hasard car le SQL (pour un SELECT du moins), la structure est la suivante : SELECT (les champs) FROM (les tables) (INNER/LEFT OUTER/RIGHT OUTER) JOIN (les jointures) WHERE (les clauses) GROUP BY (les regroupements) ORDER BY (les tri) LIMIT (délimitation) Et en POO ça donne des codes du genre : Code :
Mais c'est pas du SQL à proprement parlé, c'est des classes Objets qui sont conçues comme ça pour justement éviter une chaine d'un seul bloc qui à juste titre n'est pas pratique dans un cas comme le tiens. Découper la requête de manière logique devient par moment nécessaire. Mais le vrai problème que je remarque, c'est dans ton 2ème cas tu prévois de faire une clause : co.complet IN(1,2,3,4) Pour ma part il n'y a pas 36 solutions : - Soit il faut rajouter cette table "gm_complet" pour ensuite rajouter cette clause/condition - Soit il ne faut pas rajouter cette table et encore moins cette condition. Mais c'est en expriment ton besoin qui va le déterminer, pas en bidouillant le SQL. Quitte à l'écrire sur un bloc note quand on a un peu de mal, car il n'y a pas besoin de faire du code pour exprimer les résultats voulu. En tout cas on ne pourra deviner la requête qui serait à faire si on ne connait pas les résultat qui seraient à obtenir. Dans un cas comme ça, il peut être utile de fournir ce qu'on appel un jeu d'essai, c'est à dire une liste (simple) des lignes des tables : - D'un coté les résultats qu'on souhaite dans le cas 1 - De l'autre, les résultats du cas 2, on montrant bien ce qui doit être récupérer ou à exclure par rapport au cas 1 pour bien voir la différence. Truc pratique, c'est de faire les 2 requêtes (les 2 cas) dans PhpMyAdmin, en vérifiant bien que les résultat/lignes soient correctes. Le but est d'obtenir 2 chaines de requêtes totalement fonctionnelles. De la même manière que tu as mis précédemment, mais sans erreurs.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20 Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra] |
|||
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : février 2011 Messages : 11 ![]() |
Salut RunCodePhp
J'ai lu avec attention ton post. D'après tes dires, la construction que j'ai faite n'est pas la plus appropriée, du moins n'est plus. Elle avait une fonction au départ, maintenant elle doit en avoir deux et effectivement ma méthode ne fonctionne plus. Pourtant, malgré que le soucis me paraisse simple, cela reste éminement compliqué. Je dois accéder à une table, mais le seul moyen d'y accéder est la condition inverse à ce dotn j'ai besoin, c'est à s'arracher les cheveux Néanmoins, je vais essayer d'appliquer ta méthode et suivre tes conseils voir si j'arrive à un résultat différent, plus performant. Je repasse donner mes résultat rapidement. Merci une fois de plus en tout cas |
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : février 2011 Messages : 11 ![]() |
Re bonjour RunCodePhp
Je viens un peu donner des nouvelles! En fait, mon problème s'est étendu à plusieurs pages. La table gm_complet est en fait comme un petit satellite et est quasi inaccessible. Elle répondait à des besoin fixes et a été créée telle qu'elle. Dès que j'ai dû y avoir accès, je me suis retrouvé au même problème, impossible à déclarer, ni à jointer. Son utilité posant problème lors d'un appel en particulier, ben j'ai supprimé définitivement ces besoins, rejoingnant un peu ce que tu as dis : "Soit il ne faut pas rajouter cette table et encore moins cette condition." En tout cas merci infiniment pour les explications, même si la solution n'a pas été trouvée, j'y vois déjà bien plus clair dans la conception de requête. Je repasserai pour noter le message en résolu. Merci à tous |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com