2 problèmes d'SQL... Problématique !

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : 2 problèmes d'SQL... Problématique !

par sadeq » 02 nov. 2005, 15:50

Une solution, la jointure à gauche => afficher tout à gauche même si aucune jointure correspondante à droite:
SELECT a.dept, b.compte
FROM 
(
SELECT DISTINCT dept
FROM test.table_1
) AS a

LEFT JOIN 
(
SELECT dept, count( id ) AS compte
FROM test.table_1
WHERE valeur >0
GROUP BY dept
) AS b 

ON a.dept = b.dept

par daoud » 02 nov. 2005, 14:20

Pour la première, tu peux t'inspirer de la réponse que j'ai faite à iclo ici

par heddicmi » 02 nov. 2005, 12:53

pour la 1, c'est logique.
tu lui demande d'afficher ce qui est supérieur à 0 et tu t'étonnes que dans ton résultat, tu ne trouve pas le résultat de l'opération suivante 0+0.
Vire ta condition et tu auras ce que tu veux.
Je sais bien que c'est logique, mais j'aurais aimé trouvé une solution qui affiche, quoiqu'il en soit TOUS les départements avec le résultat de COUNT de 0 à x...
2. ce n'est pas possible mais de toute facon tu l'as avec ton résultat finale.
Tu récupères en PHP un tableau de ressources.
Si tu veux connaitre le 3eme, il te suffit d'afficher la 3eme ligne.
Je suis pas en PHP, je fais une infidélité VBiène en ce moment...

Mais le soucis, n'était pas vraiment de connaitre le 3ème, mais la position du labo X... Donc bon, bin je vais naviguer dans les résultat, tant pis :cry:

par pjl » 02 nov. 2005, 12:40

pour la 1, c'est logique.
tu lui demande d'afficher ce qui est supérieur à 0 et tu t'étonnes que dans ton résultat, tu ne trouve pas le résultat de l'opération suivante 0+0.
Vire ta condition et tu auras ce que tu veux.

2. ce n'est pas possible mais de toute facon tu l'as avec ton résultat finale.
Tu récupères en PHP un tableau de ressources.
Si tu veux connaitre le 3eme, il te suffit d'afficher la 3eme ligne.

2 problèmes d'SQL... Problématique !

par heddicmi » 02 nov. 2005, 12:24

Salut les jeunes !

Voilà, jai voulu se matin faire 2 requêtes avec pour but de me faciliter la tache en évitant des taitements derrière...

En gros, j'ai une table qui va ressembler à ça :

Code : Tout sélectionner

TABLE_1 : id ----- labo ---- dept ----------- valeur 1 ------- 01 ------ 01 --------------- 3 2 ------- 01 ------ 02 --------------- 2 3 ------- 01 ------ 03 --------------- 0 4 ------- 02 ------ 01 --------------- 4 5 ------- 02 ------ 02 --------------- 0 6 ------- 02 ------ 03 --------------- 0 . . .
1
Ma 1ère requête doit me compter le nombre d'enregistrement, par département, dont valeur>0. J'ai donc ma requête :

Code : Tout sélectionner

SELECT dept, COUNT(id) FROM TABLE_1 WHERE valeur>0 GROUP BY dept
J'espère obtenir comme résultat :

Code : Tout sélectionner

dept ------ COUNT(id) -01 ------------ 2 -02 ------------ 1 -03 ------------ 0
Mais au lieu de cela, j'obtiens :

Code : Tout sélectionner

dept ------ COUNT(id) -01 ------------ 2 -02 ------------ 1
Le département avec aucune ligne supèrieur à 0 n'est pas affiché.
Comment s'en sortir ?

2
Ma 2nde réquète, toujours dans un soucis de non traitement dans le code derrière, devait m'afficher, département pas département, le labo avec sa valeur triée par valeur décroissante, afin de déterminer un ordre dans les labos...

Du genre :

Code : Tout sélectionner

SELECT labo, valeur FROM TABLE_1 WHERE dept="01" ORDER BY valeur DESC
Mais j'aurais voulu rajouter une 3ème colonne de résultat, auto-incrémenté afin d'obtenir directement son rang (donc, ne pas avoir à compter le nombre de lignes avant d'arriver au labo souhaité)
Un résultat dans ce genre, pour le dept 01 :

Code : Tout sélectionner

labo ----------- valeur ----------- pos 02 --------------- 4 ---------------- 1 01 --------------- 3 ---------------- 2
Un résultat dans ce genre, pour le dept 02 :

Code : Tout sélectionner

labo ----------- valeur ----------- pos 01 --------------- 2 ---------------- 1 02 --------------- 0 ---------------- 2
Etc... Donc pos n'aurais simplement que 1, 2, 3, 4, 5, etc...
Comment s'en sortir ?

Merci à vous si vous avez des idées, je susi preneur :roll: