8711 sujets

Développement web côté serveur, CMS

Bonjour à tous,

J'ai fais une requête comme ceci :

SELECT evenement.id_event, 
evenement.id_tournee, 
evenement.ville_event as ville, 
evenement.lien_resa_event as lienresa, 
evenement.adresse_event as adresse,
tournee.description_tournee as descriptiontournee, 
tournee.id_tournee,
tournee.nom_tournee as nomtournee, 
seance.id_event, 
seance.dateheure_seance as seances 
FROM tournee, evenement, seance 
WHERE tournee.id_tournee = evenement.id_tournee 
AND evenement.id_event = seance.id_event
ORDER BY dateheure_seance


Tout marche parfaitement. Je souhaite cependant les trier afin qu'il n'y ai plus de doublon. Par ville_event donc ou pas id_event. Mais je n'y arrive pas.
Si vous avez une idée je suis preneur !

PS : J'attends que tout fonctionne comme je le désire pour utiliser les JOIN Smiley cligne

PS2 : J'aimerai aussi récupérer la première et la dernière date de ma table seance. J'ai essayé avec ceci : MIN(dateheure_seance) et MAX(dateheure_seance) dans la même requête mais sans sucés....

Merci d'avance à tous !
Modifié par I--Zop--I (11 Apr 2017 - 14:07)
Bonjour.

Je ne comprends pas : trier des résultats n'enlève pas les doublons...

Un 'doublon' est une ligne de résultat absolument identique à une autre et on peut les enlever avec 'SELECT DISTINCT...'

Si vous voulez regrouper des résultats, c'est une autre histoire et c'est :
https://openclassrooms.com/courses/administrez-vos-bases-de-donnees-avec-mysql/regroupement
Et c''est assez délicat.

MIN(dateheure_seance) et MAX(dateheure_seance) me paraissent très bien et je ne vois pourquoi ils ne fonctionneraient pas. (Les utiliser avec un regroupement change le sens)

Smiley smile
salut,

pour les jointures fait les dès le départ ce n'est pas elle qui vont te gêner.
C'est plus simple quand c'est un automatisme que de devoir revenir dessus (d'expérience on le fait rarement, c'est chiant parce que la requête peux être complexe et / ou on a plus le modèle en tête Smiley cligne )

SELECT id_event,
  id_tournee,
  evenement.ville_event       AS ville,
  evenement.lien_resa_event   AS lienresa,
  evenement.adresse_event     AS adresse,
  tournee.description_tournee AS descriptiontournee,
  tournee.nom_tournee         AS nomtournee
FROM tournee
JOIN evenement USING(id_tournee)
JOIN seance USING(id_event)
ORDER BY dateheure_seance


pour les doublons c'est quoi le discriminent ?
parce que je suppose que tu peux avoir plusieurs événement dans une tournée ? Smiley cligne

si tu veux n'afficher que les villes d'une tournée vire la jointure sur la table seance.
et du coup j'arrive le dernière problème les heure min et max des séances.
Sais tu utiliser la clause group by ?
cela pourrait donner un truc dans ce genre
SELECT id_event,
  id_tournee,
  evenement.ville_event       AS ville,
  evenement.lien_resa_event   AS lienresa,
  evenement.adresse_event     AS adresse,
  tournee.description_tournee AS descriptiontournee,
  tournee.nom_tournee         AS nomtournee,
  MIN(dateheure_seance)       AS premiereSeance,
  MAX(dateheure_seance)       AS derniereSeance
FROM tournee
JOIN evenement USING(id_tournee)
JOIN seance USING(id_event)
GROUP BY id_tournee,
  evenement.ville_event,
  evenement.lien_resa_event, 
  evenement.adresse_event, 
 tournee.description_tournee,
  tournee.nom_tournee     
ORDER BY dateheure_seance

bon la en vitesse j'ai un doute

Si cela ne fonctionne pas il te faudra deux subselect, ce qui donnerait quelque chose comme ça
SELECT id_event,
  id_tournee,
  evenement.ville_event       AS ville,
  evenement.lien_resa_event   AS lienresa,
  evenement.adresse_event     AS adresse,
  tournee.description_tournee AS descriptiontournee,
  tournee.nom_tournee         AS nomtournee,
  (SELECT MIN(s.dateheure_seance) FROM seance s WHERE s. id_event = id_event) AS premiereSeance,
  (SELECT MAX(s.dateheure_seance) FROM seance s WHERE s. id_event = id_event) AS derniereSeance
FROM tournee
JOIN evenement USING(id_tournee)
ORDER BY premiereSeance,derniereSeance


a tester je ne l'ai pas fait, le principe reste correcte Smiley cligne

@+
Modifié par moogliBZH (11 Apr 2017 - 12:51)
Meilleure solution
Vous disiez que votre but était de vous exercer, I--Zop--I...
Qu'avez-vous appris ?
Soit, vous avez une solution qui fonctionne.
Mais comprenez-vous la solution ?
En face d'un problème analogue, serez-vous capable de trouver la bonne requête ?

J'ai passé deux jours (pas non stop...) à essayer de comprendre une requête.

Smiley smile