Requête MySQL

Requête MySQL - SQL/NoSQL - Programmation

Marsh Posté le 27-02-2003 à 22:01:31    

Bonjour à tous,
 
J'ai actuellement un souci concernant une requête que je veux effectuer sous MySQL et je ne sais comment m'y prendre.
 
Voilà la situation :
J'ai une table où je renseigne les centres de profit, les consultants qui y sont rattachés et ceux qui les managent...
En gros :
4 champs
 
id    |   user   |   centre de profit   |   responsable (oui/non)
0001     robert           1                        1
0002     yves             1                        0
0003     georges          1                        0
0004     alexandre        2                        0
0005     sophie           2                        1
etc.
 
But de la requête :
Je veux pouvoir calculer le nombre de consultants qui sont sous la responsabilité d'un gars donné ($user)
Pour détecter le manager du centre de profit, c'est donc :
user = $user AND responsable = '1'
Si possible, je ne veux pas que le responsable soit comptabilisé dans ses effectifs.
Un gars peut être manager de plusieurs centres de profit.
Un consultant, s'il est présent dans plusieurs centres de profit, doit être pris en compte une seule fois.
 
Voilà...
Pour le moment, tous mes essais ont échoué.
Alors s'il y a des dieux du sql ici...   :D  
 
Merci d'avance :jap:

Reply

Marsh Posté le 27-02-2003 à 22:01:31   

Reply

Marsh Posté le 01-03-2003 à 17:15:08    

Personne n'a une petite idée ?  :sweat:

Reply

Marsh Posté le 01-03-2003 à 17:54:52    

Bizarre, la requête suivante semble fonctionner :
 
"Select count(distinct table1.user) as count from table1, table2 WHERE table1.gbid = table2.gbid AND table2.user = $user AND table2.gresp = '1' AND table1.user <> $user"
 
où table1 = table2
bid = centre de profit
gresp = responsable
 
Mais lorsque il y a un centre de profit sans que le $user soit responsable, tout plante (ma page ne s'affiche plus. aucun message d'erreur)
Bug mysql ou pb de requête ???
 :cry:
 
PS : et visiblement ce bug ne survient pas à tous les coups... j'arrive pas à en trouver la cause. :??:


Message édité par Thocan le 01-03-2003 à 17:57:51
Reply

Marsh Posté le 01-03-2003 à 17:59:02    

j'ai pas bien compris ce qu'il y avait dans centre de profit :/
 
edit: c'est le nombre de centre ou un id de centre ?


Message édité par trueslash le 01-03-2003 à 17:59:28
Reply

Marsh Posté le 01-03-2003 à 18:43:08    

c'est juste l'id...
 
En gros, cette table permet de connaîre quels gars travaillent dans quels centres de profit et qui, parmis eux, en est le manager (responsable)...


Message édité par Thocan le 01-03-2003 à 18:44:10
Reply

Marsh Posté le 01-03-2003 à 19:17:38    

je suis pas sûr d'avoir compris mais je pense que ça, ça devrait marcher:  
 

select count(*)
from taTable
where responsable = 0
and centre_de_profit in (select centre_de_profit
                         from taTable
                         where user = $user
                         and responsable = 1)

Reply

Marsh Posté le 01-03-2003 à 20:35:12    

Les sous-requêtes fonctionnent avec Mysql ???
Si oui, alors ta requête est bonne...


Message édité par Thocan le 01-03-2003 à 20:37:30
Reply

Marsh Posté le 01-03-2003 à 20:37:38    

Thocan a écrit :

Les sous-requêtes fonctionnent avec Mysql ???


à partir de la 4.1

Reply

Marsh Posté le 01-03-2003 à 20:40:58    

Oki,
je vais tester ça.
Merci.  :jap:

Reply

Marsh Posté le 01-03-2003 à 20:47:17    

Hmmm... Visiblement, la 4.1 c'est la toute dernière version bêta... ?
Donc ça va pas le faire, faut que je trouve autre chose...

Reply

Marsh Posté le 01-03-2003 à 20:47:17   

Reply

Marsh Posté le 01-03-2003 à 21:41:51    

Peut être quelque chose dans ce genre :
 
SELECT t1.user, t1.centre, count(*)
FROM nomTable as t1
LEFT JOIN nomTable AS t2 ON t1.centre = t2.centre
WHERE t1.responsable > 0
   AND t1.user <> t2.user
GROUP BY t1.centre, t1.user


Message édité par mrbebert le 01-03-2003 à 21:42:40
Reply

Marsh Posté le 01-03-2003 à 23:02:15    

Il me semble que MySql connait pas les JOIN...
Je me trompe ?

Reply

Marsh Posté le 01-03-2003 à 23:06:21    

Thocan a écrit :

Il me semble que MySql connait pas les JOIN...
Je me trompe ?


MySQL sait quand meme faire les join, faut pas deconner non plus  :lol:

Reply

Marsh Posté le 01-03-2003 à 23:07:28    

Thocan a écrit :

Il me semble que MySql connait pas les JOIN...
Je me trompe ?


Ouais : http://www.mysql.com/doc/en/JOIN.html
[:boidleau]
 
EDIT : [:grilled]


Message édité par Taiche le 01-03-2003 à 23:07:46

---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 01-03-2003 à 23:10:32    

Bon, OK, m'est planté!  :D  
En fait, c'est les INNER JOIN qu'il ne comprenait pas ses anciennes versions...
 
Mea culpa.  :ange:

Reply

Marsh Posté le 01-03-2003 à 23:12:31    

Thocan a écrit :

Bon, OK, m'est planté!  :D  
En fait, c'est les INNER JOIN qu'il ne comprenait pas ses anciennes versions...
 
Mea culpa.  :ange:  

C'est quoi la différence entre INNER JOIN et LEFT JOIN :??:

Reply

Marsh Posté le 01-03-2003 à 23:18:15    

Marrant (enfin... non, pas vraiment) : cette requête fonctionne comme celle que j'avais postée au tout début.
Et j'obtiens exactement les mêmes bugs dans les mêmes cas.
C'est vraiment bizarre.
 
Je vais tester une autre version de mysql, histoire de voir.

Reply

Marsh Posté le 01-03-2003 à 23:22:53    

Tu veux le nombre de consultants seulement pour un responsable donné, ou le nombre de consultants par responsable (en considérant tous les responsables) ?
J'essayais de répondre au 1er cas, mais le 2ème doit être plus simple.

Reply

Marsh Posté le 01-03-2003 à 23:27:30    

Non. Ca ne change rien.
Je pige po là...  :??:  
 
Pas de message d'erreur, rien. Il me zappe juste la page.

Reply

Marsh Posté le 01-03-2003 à 23:28:25    

Elle renvoie quoi la requête ? Peut être qu'il n'y a pas de résultat (résultat avec 0 lignes)

Reply

Marsh Posté le 01-03-2003 à 23:28:31    

mrBebert a écrit :

Tu veux le nombre de consultants seulement pour un responsable donné, ou le nombre de consultants par responsable (en considérant tous les responsables) ?
J'essayais de répondre au 1er cas, mais le 2ème doit être plus simple.


 
Le 1er cas.
 
Les deux méthodes semblent fonctionner, mais ça plante dans des cas particuliers et je ne comprends pas pourquoi.

Reply

Marsh Posté le 01-03-2003 à 23:30:01    

mrBebert a écrit :

Elle renvoie quoi la requête ? Peut être qu'il n'y a pas de résultat (résultat avec 0 lignes)


 
La requête renvoie un nombre.
Mais le bug est que, dans certains cas, toute la page (php) est zappée à patir de la ligne de code de la requête.

Reply

Marsh Posté le 01-03-2003 à 23:34:16    

Ex :  
J'ai une dizaine de ligne dans ma table, et mon user sélectionné est responsable de deux centres de profit.
Il est également membre (sans être responsable) d'un troisième centre.
La requête fonctionne.
 
Je modifie une ligne en transformant mon user en simple membre d'un de ses centres (un des deux où il était auparavant responsable).
-> La page plate :
- pas de message d'erreur
- plus rien est affiché à partir de la requête (dans le code php)
 
La, vraiment, je pige po...  :??:
 
 
PS : la deuxième requête renvoie un résultat faux mais le bug survient de la même manière...


Message édité par Thocan le 01-03-2003 à 23:39:00
Reply

Marsh Posté le 01-03-2003 à 23:49:43    

Bon.
Ca y est, j'ai trouvé :
 
J'avais un enregistrement donc l'id - théoriquement incrémenté - était supérieur à son suivant (dans phpMyAdmin)
ex :
1
2
10  
7
8
 
Pourquoi ? Sans doute une erreur de manip...
En attendant, ça m'a pris 2j de boulot, cette connerie...  :fou:  
 
Merci à ceux qui m'ont aidé dans ma difficile quête...  :)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed