|
Publicité | ||||||||||||||||||||||
|
|
#1 |
|
Nouveau membre du Club
![]() |
Bonjour à tous,
Est ce qu'il y a une autre façon de sélectionner un nombre bien précis d'enregistrement sans utiliser 'Limit'. Merci. |
|
|
00
|
|
|
#2 |
![]() |
Ca dépend du contexte et de la requête.
Dans certains cas, ce sera possible. Dans d'autres non. Que veux-tu faire plus précisément ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ! Soutenons l'industrie logicielle française ! |
|
|
00
|
|
|
#3 |
|
Nouveau membre du Club
![]() |
Merci pour votre réponse.
Pour mon cas je voudrais calculer le nombre de point pour un club donné et cela ne se fait si le club a participé d'au moins de 4 athlètes. Exemple : Club Athlète classement C1 AT1 1 C2 AT2 2 C3 AT3 3 C2 AT4 4 C2 AT5 5 C1 AT6 6 C3 AT7 7 C1 AT8 8 C2 AT9 9 C1 AT10 10 Classement de clubs Nbre de point C2 20 (2+4+5+9) C1 25 (1+6+8+10) C3 est annulé car le nombre de participants est inférieur à 4. Merci pour votre aide. |
|
|
00
|
|
|
#4 |
|
Nouveau membre du Club
![]() |
Voici mon bout de code mais malheureusement, il comptabilise la somme des classements d'un club donnée.
Code :
SELECT c.club, sum(r.classement) FROM resultat r, clubs c WHERE r.id_club = c.id_club AND r.id_comp = '130' AND r.id_club = 13 GROUP BY club LIMIT 0 , 4 Dernière modification par CinePhil ; 11/03/2010 à 14h02. Motif: Balises codes en remplacement de quote |
|
|
00
|
|
|
#5 | |
![]() |
Citation:
Essaie ceci : Code :
SELECT c.club, SUM(r.classement) AS Total_Points FROM resultat AS r INNER JOIN club AS c ON r.id_club = c.id_club WHERE r.id_comp = 130 GROUP BY c.club HAVING COUNT(DISTINCT athlete) > 3
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ! Soutenons l'industrie logicielle française ! |
|
|
|
00
|
|
|
#6 |
|
Nouveau membre du Club
![]() |
Ta requête fonctionne bien, mais le problème il cumule le classement de l'ensemble des athlètes qui sont plus de 4. Mais normalement je souhaiterais sélectionner les clubs qui ont participé d'au moins par 4 athlètes, et faire la somme du classement uniquement pour les 4 premiers. Car parfois un club peut participer par 9 athlètes et je dois classer ce club uniquement par ses 4 premiers athlètes.
|
|
|
00
|
|
|
#7 |
![]() |
Ce n'était pas précisé dans ta demande précédente, même si c'est ce que sous-entendait le titre de ton premier message !
En m'inspirant de cette source MySQL, je pense qu'on peut obtenir les 4 premiers par club : Code :
SELECT c.club, r.athlete, r.classement FROM resultat AS r INNER JOIN club AS c ON r.id_club = c.id_club WHERE r.id_comp = 130 AND ( SELECT COUNT(*) FROM resultat AS r1 WHERE r1.id_club = r.id_club AND r1.classement > r.classement ) < 4 ORDER BY r.id_club, r.classement Code :
SELECT t.club, SUM(t.classement) AS Total_Points FROM ( SELECT c.club, r.athlete, r.classement FROM resultat AS r INNER JOIN club AS c ON r.id_club = c.id_club WHERE r.id_comp = 130 AND ( SELECT COUNT(*) FROM resultat AS r1 WHERE r1.id_club = r.id_club AND r1.classement > r.classement ) < 4 ORDER BY c.club, r.classement ) AS t GROUP BY t.club HAVING COUNT(DISTINCT t.athlete) = 4
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau) À la maison comme au bureau, j'utilise Mandriva Linux ! Soutenons l'industrie logicielle française ! |
|
|
00
|
|
|
#8 |
|
Nouveau membre du Club
![]() |
Bonjour,
Malheureusement je n'arrive pas à sélectionner les 4 premiers enregistrements pour un club donné dans une compétition X. Code :
SELECT c.club, res.id_athlete, res.cl_r AS classement FROM `Tpersonne` p INNER JOIN Tathlete a ON p.id_pers = a.id_pers INNER JOIN Tathlete_club r ON r.id_athlete = a.id_athlete INNER JOIN Tclub c ON c.id_club = r.id_club INNER JOIN Tresultats res ON res.id_athlete=r.id_athlete WHERE r.saison = '2009-2010' AND res.id_comp='855' AND r.id_club = '159' AND res.categorie='Junior' AND p.sexe_pers='F' AND ( SELECT COUNT(*) FROM Tresultats AS res1 WHERE res1.classement=res.classement AND res1.classement>res.classement )<4 Merci pour aide. Dernière modification par wperle ; 16/03/2010 à 17h05. |
|
|
00
|
|
|
#9 |
![]() Inscription: avril 2002
Messages: 3 092
|
Bonjour,
Avant d'ajouter des tables et des jointures supplémentaires, qui vont encore complexifier la question, est-ce que la seconde requête proposée par Cinephil renvoie bien le résultat que vous attendez, pour les colonnes qu'elle contient ? Dans un second, seulement si la réponse à cette première question est oui, alors il nous faudrait le schéma de la base, la liste des colonnes que vous souhaitez dans la requête et, pourquoi pas, un petit exemple de données sur chaque table et de ce que vous souhaitez en sortie de requête. Si la requête de Cinephil ne fonctionne pas, pouvez-vous nous dire ce qui ne convient pas dans le résultat obtenu ? ced
__________________
Rédacteur / Modérateur SGBD Mes tutoriels et la FAQ MySQL ---------------------------------------------------- Pensez aux balises code et au tag Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
|
|
|
00
|
|
|
#10 |
|
Nouveau membre du Club
![]() |
Merci CED,
Je me suis référé à l'exemple de CinePhil, et j'ai essayé de l'appliquer à mon cas mais vu j'ai une architecture un peu complexe je n'arrives pas vraiment sélectionner les lignes que je veux restituer. L'architecture est la suivante : Tpersonne (idpers, nom, prenom, date_naissance, sexe....) Tathlete (idpers, idathl, carte_adhesion, idpere, idmere) pour idpere et idmere se sont aussi enregistré dans la table personne Tathlete_club (idathl, idclub, categorie, dateRenouvellement ) Tclub (idclub, club ) Tepreuve(idepr, libelle) Tcalendrier(idcomp, libelle, dateCompetition, typeCompetition) Tresultats (idathl, idcomp, idclub, idepr, performance, classement, categorieJouer) il se peut qu'un minime a joué avec les cadets |
|
|
00
|
|
|
#11 |
![]() Inscription: avril 2002
Messages: 3 092
|
Avec les vrais noms de tables, la requête de Cinephil devient :
Code :
SELECT t.club, SUM(t.classement) AS Total_Points FROM ( SELECT c.club, r.idathlete, r.classement FROM Tresultats AS r INNER JOIN Tclub AS c ON r.idclub = c.idclub WHERE r.idcomp = 130 AND ( SELECT COUNT(*) FROM Tresultats AS r1 WHERE r1.idclub = r.idclub AND r1.classement > r.classement ) < 4 ORDER BY c.club, r.classement ) AS t GROUP BY t.club HAVING COUNT(DISTINCT t.athlete) = 4 Si oui, le résultat est-il celui attendu ? Si oui, super ced
__________________
Rédacteur / Modérateur SGBD Mes tutoriels et la FAQ MySQL ---------------------------------------------------- Pensez aux balises code et au tag Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
|
|
|
00
|
|
|
#12 |
|
Nouveau membre du Club
![]() |
Bonjour ced,
Effectivement j'ai essayé la requête de CinePhil, cette dernière fonctionne bien. Pas de message d'erreur mais le résultat obtenu n'est pas bon. J'ai essayé de copier ma table résultat dans la table résultat1 et je l'ai dé normaliser pour éviter le trop de jointure donc mes tables qui restent sont les suivantes tresultat1 et tclub. le résultat est toujours le même. En pièce jointe la requête et le résultat obtenue. Pour classer un club d'abord il faut fixer la catégorie (minimes, cadet(tes), juniors, seniors) et le genre Hommes ou Dames. |
|
|
00
|