Condition sur un COUNT ? [MySQL] - SQL/NoSQL - Programmation
Marsh Posté le 27-04-2005 à 08:33:35
zapan666 a écrit :
|
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+
Marsh Posté le 27-04-2005 à 11:28:18
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 *
Marsh Posté le 27-04-2005 à 13:10:18
cinocks a écrit : SELECT l.id_lieu, COUNT(l.id_lieu) AS nb_concert |
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)
Marsh Posté le 27-04-2005 à 13:53:34
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 ?????
Marsh Posté le 27-04-2005 à 17:55:33
Tu as essayé la requête de cinocks ?
Ca a l'air ok à 1ère vue ...
Code :
|
Marsh Posté le 27-04-2005 à 18:12:53
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 :
|
(sachant que j'ai 8 salles, avec des ids qui vont de 1 à 8
Marsh Posté le 27-04-2005 à 20:58:15
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 ...
Marsh Posté le 27-04-2005 à 21:48:02
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 )
Marsh Posté le 27-04-2005 à 21:49:56
En même temps, tu peux aussi faire 2 requêtes séparées ...
Marsh Posté le 26-04-2005 à 17:51:50
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
Voici ma requete actuelle :
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