Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
883 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL]Condition sur un COUNT ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MySQL]Condition sur un COUNT ?

n°1061655
zapan666
Tout est relatif
Posté le 26-04-2005 à 17:51:50  profilanswer
 

Bonjour !  
 
J'ai un p'tit problème avec une requete SQL :  
Voici comment elle doit fonctionner :  
 
j'ai des salles de concerts qui peuvent avoir plusieurs concerts, et j'aimerais avoir la liste des salles de concerts ainsi que le nombre de prochains concerts qui auront lieux dans chaque salle. ( date_concert >= NOW() ). Si la salle n'a aucun prochain concert, bah, le count doit donner 0
 
Cardinalité : une salle peut avoir plusieurs concerts.
 
Pour relier ces deux tables, j'utilise l'identifiant id_lieu  
 
Le problème, c'est que...bah, j'y arrive pas :cry:  
 
Voici ma requete actuelle :  

Code :
  1. SELECT l. * , COUNT( DISTINCT ( c.date_concert >= NOW( ) ) ) AS nb_concert
  2. FROM lieu l
  3. LEFT OUTER JOIN concert c ON c.id_lieu = l.id_lieu
  4. GROUP BY l.id_lieu


Elle me donne normalement bien ce que je veux mais le problème est que si la salle n'a aucun concert de prévu, la requete m'indique un count a 1  :( (alors que je veux 0 ! )
 
Je pense qu'il est possible de modifié la condition sur le count, mais je ne sais pas trop comment.
 
 
Merci de m'avoir lu !


Message édité par zapan666 le 26-04-2005 à 17:53:38
mood
Publicité
Posté le 26-04-2005 à 17:51:50  profilanswer
 

n°1062197
gfa
Posté le 27-04-2005 à 08:33:35  profilanswer
 

zapan666 a écrit :


Voici ma requete actuelle :  

Code :
  1. SELECT l. * , COUNT( DISTINCT ( c.date_concert >= NOW( ) ) ) AS nb_concert
  2. FROM lieu l
  3. LEFT OUTER JOIN concert c ON c.id_lieu = l.id_lieu
  4. GROUP BY l.id_lieu


Elle me donne normalement bien ce que je veux mais le problème est que si la salle n'a aucun concert de prévu, la requete m'indique un count a 1  :( (alors que je veux 0 ! )
 
Je pense qu'il est possible de modifié la condition sur le count, mais je ne sais pas trop comment.


Salut,
 
Je ne connais pas particulièrement MySQL mais il me semble que tu ferais mieux de faire un WHERE sur ton JOIN (peut-être pas possible avec MySQL?). Comme ça, ton COUNT ne se fait déjà directement que sur ce qui t'intéresse:
 
SELECT COUNT(c.date_concert) AS nb_concert FROM lieu l LEFT OUTER JOIN concert c ON c.id_lieu = l.id_lieu WHERE c.date_concert >= NOW() GROUP BY l.id_lieu
 
Il me semble que ça devrait fonctionner.
 
A+

n°1062495
cinocks
Posté le 27-04-2005 à 11:28:18  profilanswer
 

SELECT l.id_lieu, COUNT(l.id_lieu) AS nb_concert
FROM lieu l
LEFT OUTER JOIN concert c ON c.id_lieu = l.id_lieu
WHERE c.date_concert >= NOW( )
GROUP BY l.id_lieu
 
si tu veux rajouter une autre information dans ton select, elle doit apparaitre dans le group by.
Tu ne pourras pas faire un regroupement sur *


---------------
MZP est de retour
n°1062621
zapan666
Tout est relatif
Posté le 27-04-2005 à 13:10:18  profilanswer
 

cinocks a écrit :

SELECT l.id_lieu, COUNT(l.id_lieu) AS nb_concert
FROM lieu l
LEFT OUTER JOIN concert c ON c.id_lieu = l.id_lieu
WHERE c.date_concert >= NOW( )
GROUP BY l.id_lieu


Je ne peux pas utilisé la clause WHERE dans ce cas là ! En effet, avec cette clause je vais supprimer les salles qui n'ont pas prévu de concert, alors que je les veux quand même ces salles !
 
J'y ais réfléchi & voilà ce que j'aurais voulu faire : faire votre requete (donc avec le where) pour avoir les salles avec les prochaines concerts et refaire une jointure, une nouvelle fois sur la tableau des salles de concerts (lieu) pour récupérer les salles sans concert : le problème est que mysql fait la jointure PUIS fais le WHERE (alors que moi, si il pouvait faire le WHERE puis la jointure que je veux, ça m'arrangerais)
 
 

n°1062686
zoran8000
Juste quelques hommes...justes
Posté le 27-04-2005 à 13:53:34  profilanswer
 

Hey Zapan mon ami ! (oui, j'ai l'immense honneur de connaitre Zapan et alors ? Je connais beaucoup d'autres gens que vous ne connaissez pas !!!)
 
Je dis ca comme ca (ca fait un an que j'ai arreté la BDD complexe), mais avec un Having des fois y aurai pas une solution avec une requete imbriquée ?????

n°1062797
zapan666
Tout est relatif
Posté le 27-04-2005 à 14:43:13  profilanswer
 

Mysql 3.quelquechose => pas de requete imbriqué possible :(

n°1063153
Beegee
Posté le 27-04-2005 à 17:55:33  profilanswer
 

Tu as essayé la requête de cinocks ?
 
Ca a l'air ok à 1ère vue ...
 

Code :
  1. SELECT l.id_lieu,
  2.        COUNT(c.id_lieu) AS nb_concert
  3. FROM lieu l
  4. LEFT OUTER JOIN concert c ON c.id_lieu = l.id_lieu
  5. WHERE c.date_concert >= NOW()
  6. GROUP BY l.id_lieu;

n°1063192
zapan666
Tout est relatif
Posté le 27-04-2005 à 18:12:53  profilanswer
 

ouais, j'ai essayé : le problème, c'est que ça élimine les salles qui n'ont pas prévu de concert (hors, je veux la liste de toutes les salles !)
 
Résultat de la requete de cinocks :  

Code :
  1. id_lieu      nb_concert
  2. 2  1
  3. 3  2
  4. 7  1


(sachant que j'ai 8 salles, avec des ids qui vont de 1 à 8

n°1063354
Beegee
Posté le 27-04-2005 à 20:58:15  profilanswer
 

et si tu fais :
 
SELECT DISTINCT l.id_lieu, 0
FROM lieu l
LEFT OUTER JOIN concert c ON c.id_lieu = l.id_lieu  
WHERE c.date_concert >= NOW()  
AND c.id_lieu IS NULL;
 
Ca te renvoie les salles n'ayant pas prévu de concert ???
 
Si c'est le cas tu peux faire l'union de ces deux requêtes ...

n°1063392
zapan666
Tout est relatif
Posté le 27-04-2005 à 21:48:02  profilanswer
 

bah, le pb de l'union, c'est que sur le serveur SQL que j'ai, bah, je crois qu'elle y est pas ( 3.23.52 ) mais comme je crois que sur les comptes Free, la version de mysql est une 4.quelquechose, et qu'apparament, ces versions acceptes l'union...bah, j'vais pi être passer a la 4.quelque chose chez moi pour utiliser l'union ;)
 
 
(mais si quelqu'un trouve comment faire sans l'union, je prend quand même ;))

mood
Publicité
Posté le 27-04-2005 à 21:48:02  profilanswer
 

n°1063393
Beegee
Posté le 27-04-2005 à 21:49:56  profilanswer
 

En même temps, tu peux aussi faire 2 requêtes séparées ... :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MySQL]Condition sur un COUNT ?

 

Sujets relatifs
formation mysqlproblème de connexion à MySQL via DBI
Oracle et MySQL, même protocole réseau ?Apache, MySQL, un problème.
Quel centre de formation PHP/MySQL?Probleme portage mysql -> oracle (JDBC)
Condition entre combobox[MySQL] problème de left join (fusion de suppression)
MYSQL MARCHE PASEnum en Mysql
Plus de sujets relatifs à : [MySQL]Condition sur un COUNT ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR