Gros soucis avec une requête sql
Micky
-
Posotaz Messages postés 505 Statut Membre -
Posotaz Messages postés 505 Statut Membre -
Bonjour à tous
Je suis en train de développer un site web pour un club de basket, et j'ai un soucis avec deux requete sql.
Les 2 tables qui nous intéressent :
LA TABLE EQUIPES
CREATE TABLE `equipes` (
`id` int(11) NOT NULL auto_increment,
`nom` text NOT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `equipes` VALUES (1, 'Seniors A');
INSERT INTO `equipes` VALUES (2, 'Seniors B');
INSERT INTO `equipes` VALUES (3, 'Seniors F');
LA TABLE MATCHS
CREATE TABLE `matchs` (
`id` int(11) NOT NULL auto_increment,
`date` date default NULL,
`heure` text NOT NULL,
`domicile` text NOT NULL,
`exterieur` text NOT NULL,
PRIMARY KEY (`id`)
) ;
INSERT INTO `matchs` VALUES (24, '2007-10-27', '20h30', 'La madeleine 2', 'Seniors A'');
INSERT INTO `matchs` VALUES (23, '2007-10-20', '20h30', 'Seniors A', 'Mamers'');
INSERT INTO `matchs` VALUES (22, '2007-10-13', '16h', 'Joue labbé', 'Seniors A');
INSERT INTO `matchs` VALUES (21, '2007-10-06', '15h30', 'Sablé 2', 'Seniors A');
INSERT INTO `matchs` VALUES (10, '2007-11-11', '14h', 'Seniors B', 'Ecomoy 2');
INSERT INTO `matchs` VALUES (11, '2007-11-17', '20h', 'Rouillon 1', 'Seniors B');
INSERT INTO `matchs` VALUES (13, '2007-10-13', '20h', 'Seniors F', 'Fresnay');
INSERT INTO `matchs` VALUES (14, '2007-11-20', '20h', 'Marollais', 'Seniors F');
INSERT INTO `matchs` VALUES (15, '2007-10-27', '20h', 'Céran Yvré', 'Seniors F');
1) Ce que je veut faire, c'est une requête qui selectionne les 2 prochains matchs de chaque équipe.
Celle-ci devra donc me renvoyer les 2 matchs à venir pour les Seniors A, les Seniors B et le Seniors F (que ce soit des matchs a domicile ou à l'extérieur).
2) Dans le même style j'ai aussi besoin d'une requête qui me renvoit LE dernier matchs joué par chaque équipe.
Je suis assez médiocre pour exécuter des requetes sql dès que ca se complique un peu.
Voilà. Merci do votre attention
Je suis en train de développer un site web pour un club de basket, et j'ai un soucis avec deux requete sql.
Les 2 tables qui nous intéressent :
LA TABLE EQUIPES
CREATE TABLE `equipes` (
`id` int(11) NOT NULL auto_increment,
`nom` text NOT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `equipes` VALUES (1, 'Seniors A');
INSERT INTO `equipes` VALUES (2, 'Seniors B');
INSERT INTO `equipes` VALUES (3, 'Seniors F');
LA TABLE MATCHS
CREATE TABLE `matchs` (
`id` int(11) NOT NULL auto_increment,
`date` date default NULL,
`heure` text NOT NULL,
`domicile` text NOT NULL,
`exterieur` text NOT NULL,
PRIMARY KEY (`id`)
) ;
INSERT INTO `matchs` VALUES (24, '2007-10-27', '20h30', 'La madeleine 2', 'Seniors A'');
INSERT INTO `matchs` VALUES (23, '2007-10-20', '20h30', 'Seniors A', 'Mamers'');
INSERT INTO `matchs` VALUES (22, '2007-10-13', '16h', 'Joue labbé', 'Seniors A');
INSERT INTO `matchs` VALUES (21, '2007-10-06', '15h30', 'Sablé 2', 'Seniors A');
INSERT INTO `matchs` VALUES (10, '2007-11-11', '14h', 'Seniors B', 'Ecomoy 2');
INSERT INTO `matchs` VALUES (11, '2007-11-17', '20h', 'Rouillon 1', 'Seniors B');
INSERT INTO `matchs` VALUES (13, '2007-10-13', '20h', 'Seniors F', 'Fresnay');
INSERT INTO `matchs` VALUES (14, '2007-11-20', '20h', 'Marollais', 'Seniors F');
INSERT INTO `matchs` VALUES (15, '2007-10-27', '20h', 'Céran Yvré', 'Seniors F');
1) Ce que je veut faire, c'est une requête qui selectionne les 2 prochains matchs de chaque équipe.
Celle-ci devra donc me renvoyer les 2 matchs à venir pour les Seniors A, les Seniors B et le Seniors F (que ce soit des matchs a domicile ou à l'extérieur).
2) Dans le même style j'ai aussi besoin d'une requête qui me renvoit LE dernier matchs joué par chaque équipe.
Je suis assez médiocre pour exécuter des requetes sql dès que ca se complique un peu.
Voilà. Merci do votre attention
A voir également:
- Gros soucis avec une requête sql
- Logiciel sql - Télécharger - Bases de données
- Sql (+) - Forum Programmation
- Erreur lors de l'envoi de la requête facebook - Forum Facebook
- Erreur de requete facebook - Forum Facebook
- Requête sql pour afficher uniquement les fleurs dont le prix est strictement inférieur à 10 euros - Forum calculatrices
5 réponses
je n vais pas pouvoir regler ton probleme mais en revanche je voulais savoir si ton club n avais pas besoin d un joueur , en faite mon beau frere est basketeur professionnelle en rep dominicaine et il joue en premiere dans l equipe de saint domingue et dans l equipe national , j aimerais et surtout , aimerions qu il vienne en europe pour jouer au basket professionellement , est ce que tu aurais un contact ...?
J'aurais bien voulu t'aider Leo, mais mon club joue en départemental, et je doute que ca interesse ton beau frere.
Essaye donc de contacter les clubs de pro A et de pro B, on sait jamais.
Sinon je cherche toujours des réponses à mes questions.
En espérant trouver de l'aide, bye.
Essaye donc de contacter les clubs de pro A et de pro B, on sait jamais.
Sinon je cherche toujours des réponses à mes questions.
En espérant trouver de l'aide, bye.
Salut,
C'est beau le monde des bases de données temporelles :D
Question : Si `domicile` et `exterieur` sont des références vers les équipes, pourquoi ce n'est pas le cas dans ta structure ?
En principe ça ne doit pas être très compliqué en le faisant en plusieurs fois. Si `domicile` et `exterieur` contiennent le nom des équipes qui jouent, il faudrait une requête qui fasse un truc genre à :
Pour récupérer le dernier match joué pour une équipe donnée ça devrait ressembler à :
La première requête fonctionne sur le même principe en demandant toutes les dates futures (ou celle du jour) où l'équipe 'Senior A' est impliquée, en triant les dates par ordre croissant. Ainsi les premiers résultats seront les plus proches matchs en date.
Maintenant il faut vérifier la syntaxe et ma logique mais l'idée y est. Bon courage !
PS : Vive les ptits !!! (j'ai rien contre les grands basketteurs hein :D mais bon faudrait voir plus de ptits dans le monde du sport ^^)
C'est beau le monde des bases de données temporelles :D
Question : Si `domicile` et `exterieur` sont des références vers les équipes, pourquoi ce n'est pas le cas dans ta structure ?
En principe ça ne doit pas être très compliqué en le faisant en plusieurs fois. Si `domicile` et `exterieur` contiennent le nom des équipes qui jouent, il faudrait une requête qui fasse un truc genre à :
SELECT * FROM matchs WHERE (domicile = 'Seniors A' OR exterieur='Seniors A') AND date >= DATE() ORDER BY date ASCà répéter pour chaque équipe. Puis pour ne renvoyer que les deux suivants tu peux normalement utiliser LIMIT 2 ou gérer ça par programmation.
Pour récupérer le dernier match joué pour une équipe donnée ça devrait ressembler à :
SELECT * FROM matchs WHERE (domicile = 'Seniors A' OR exterieur='Seniors A') AND date < DATE() ORDER BY date DESCJe n'ai pas testé mais pour te donner un peu d'explications, cette requête sélectionne tous les matchs où l'équipe "Senior A" est impliquée et où la date est inférieure (donc antérieure) à celle actuelle, les triant par ordre décroissant. Ainsi le premier résultat renvoyé sera bien le dernier match en date.
La première requête fonctionne sur le même principe en demandant toutes les dates futures (ou celle du jour) où l'équipe 'Senior A' est impliquée, en triant les dates par ordre croissant. Ainsi les premiers résultats seront les plus proches matchs en date.
Maintenant il faut vérifier la syntaxe et ma logique mais l'idée y est. Bon courage !
PS : Vive les ptits !!! (j'ai rien contre les grands basketteurs hein :D mais bon faudrait voir plus de ptits dans le monde du sport ^^)
Salut Posotaz, et merci de te préoccuper de mon problème.
Tes requêtes ne sont pas mal , seulement il me faut plus de DYNAMISME.
Es ce qu'il est possible d'aller chercher les equipes dans la tables equipe, au lieu de les nommer une a une (dans la clause WHERE) ?
De plus je ne peut pas utiliser la clause limit comme tu me l'indique, en effet si je met (limit 0,2), ca ne me renvoit pas les 2 derniers matchs de chaque équipe, mais les 2 derniers matchs de toute la base matchs.
Merci encore, bye
Tes requêtes ne sont pas mal , seulement il me faut plus de DYNAMISME.
Es ce qu'il est possible d'aller chercher les equipes dans la tables equipe, au lieu de les nommer une a une (dans la clause WHERE) ?
De plus je ne peut pas utiliser la clause limit comme tu me l'indique, en effet si je met (limit 0,2), ca ne me renvoit pas les 2 derniers matchs de chaque équipe, mais les 2 derniers matchs de toute la base matchs.
Merci encore, bye
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut Micky,
J'ai parfois tendance à me rouiller un peu par moments mais plus de dynamisme me semble possible. Je te donne juste l'idée sans trop de conviction :
Sélectionne tous les matchs
où domicile ou exterieur contient une valeur de la liste
sélectionne 'nom' de la table 'equipes'
en les groupant par 'equipes'.nom'
La première partie se présente comme suit (tu vas récupérer tous les matchs où tes équipes Senior sont impliquées) :
SELECT *
FROM matchs
WHERE (domicile IN (SELECT nom FROM equipes) OR exterieur IN (SELECT nom FROM equipes))
AND date >= DATE()
ORDER BY date ASC
Mais pour le groupement je ne sais pas t'aider je n'ai jamais vraiment maîtrisé ça :-s En général je ne me tracasse jamais trop pour une requête SQL, quand je me trouve limité j'emploie la manière forte en gérant le reste par programmation (je sais c'est lâche :D).
Pour le comportement de la clause LIMIT je trouve ça louche... si ça fonctionne sans ça devrait fonctionner avec, étonnant. Enfin... bonne poursuite !
J'ai parfois tendance à me rouiller un peu par moments mais plus de dynamisme me semble possible. Je te donne juste l'idée sans trop de conviction :
Sélectionne tous les matchs
où domicile ou exterieur contient une valeur de la liste
sélectionne 'nom' de la table 'equipes'
en les groupant par 'equipes'.nom'
La première partie se présente comme suit (tu vas récupérer tous les matchs où tes équipes Senior sont impliquées) :
SELECT *
FROM matchs
WHERE (domicile IN (SELECT nom FROM equipes) OR exterieur IN (SELECT nom FROM equipes))
AND date >= DATE()
ORDER BY date ASC
Mais pour le groupement je ne sais pas t'aider je n'ai jamais vraiment maîtrisé ça :-s En général je ne me tracasse jamais trop pour une requête SQL, quand je me trouve limité j'emploie la manière forte en gérant le reste par programmation (je sais c'est lâche :D).
Pour le comportement de la clause LIMIT je trouve ça louche... si ça fonctionne sans ça devrait fonctionner avec, étonnant. Enfin... bonne poursuite !