par
Patriboom » 02 févr. 2008, 01:15
Voici enfin qui fonctionne:
Code : Tout sélectionner
ELECT *
FROM (
SELECT Dte_Jour, Details, Dte_Mois,
CASE WHEN ferie_type = 'Annuel'
THEN 2008
ELSE Dte_Annee
END AS Annee_calculee
FROM paroisses_feries
WHERE Dte_Mois = 6
) AS Annee_calculee
HAVING Annee_calculee = 2008
LIMIT 0 , 30
Il faut donc choisir les colonnes dans la sous-requête.
Cette version peut aussi donner de bons résultats.
Code : Tout sélectionner
SELECT Dte_jour, Annee_calculee, Details
FROM (
SELECT Dte_Jour, Details,
CASE WHEN ferie_type = 'Annuel'
THEN 2008
ELSE Dte_Annee
END AS Annee_calculee
FROM paroisses_feries
WHERE Dte_Mois =1
) AS Banane
WHERE Annee_calculee = 2008
LIMIT 0 , 30, mais la répétition des champs m'épuise

lorsqu'inutile. J'avoue que tout ce bataclan, inclus dans une requête comprenant un JOIN, nécessiterait vraisemblablement une répétition des champs.
Merci à toi, patient éléphant (Berzemus).
La structure n'a pas changé depuis le premier message, voici des données réelles.
Code : Tout sélectionner
CREATE TABLE `paroisses_feries` (
`id_ferie` int(11) NOT NULL auto_increment,
`id_paroisse` int(11) NOT NULL,
`Dte_Jour` int(11) NOT NULL,
`Dte_Mois` int(11) NOT NULL,
`Dte_Annee` int(11) NOT NULL,
`ferie_type` enum('Une fois','Annuel','Special') NOT NULL,
`Titre` varchar(10) NOT NULL,
`Details` varchar(50) NOT NULL,
PRIMARY KEY (`id_ferie`),
KEY `Calendrier` (`Dte_Mois`,`Dte_Jour`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Le calendrier des fêtes paroissiales et religieuses' AUTO_INCREMENT=190 ;
--
-- Contenu de la table `paroisses_feries`
--
INSERT INTO `paroisses_feries` (`id_ferie`, `id_paroisse`, `Dte_Jour`, `Dte_Mois`, `Dte_Annee`, `ferie_type`, `Titre`, `Details`) VALUES
(1, 1, 25, 8, 2008, 'Annuel', 'Assomption', 'Fête patronale de l`Assomption'),
(2, 1, 24, 6, 2008, 'Annuel', 'St-Jean', 'Saint-Jean Baptiste'),
(3, 1, 25, 12, 2008, 'Annuel', 'Noël', 'La Nativité de notre Seigneur Jésus'),
(4, 1, 1, 1, 2008, 'Annuel', 'Nouvel An', 'Nouvelle année'),
(5, 1, 2, 11, 2007, 'Annuel', 'Fête morts', 'Commémoration des fidèles défunts'),
(7, 1, 15, 4, 1990, 'Une fois', 'Pâques', 'La Résurrection de notre Seigneur');
Voici enfin qui fonctionne:
[code]
ELECT *
FROM (
SELECT Dte_Jour, Details, Dte_Mois,
CASE WHEN ferie_type = 'Annuel'
THEN 2008
ELSE Dte_Annee
END AS Annee_calculee
FROM paroisses_feries
WHERE Dte_Mois = 6
) AS Annee_calculee
HAVING Annee_calculee = 2008
LIMIT 0 , 30[/code]
Il faut donc choisir les colonnes dans la sous-requête.
Cette version peut aussi donner de bons résultats.[code]SELECT Dte_jour, Annee_calculee, Details
FROM (
SELECT Dte_Jour, Details,
CASE WHEN ferie_type = 'Annuel'
THEN 2008
ELSE Dte_Annee
END AS Annee_calculee
FROM paroisses_feries
WHERE Dte_Mois =1
) AS Banane
WHERE Annee_calculee = 2008
LIMIT 0 , 30[/code], mais la répétition des champs m'épuise :!: lorsqu'inutile. J'avoue que tout ce bataclan, inclus dans une requête comprenant un JOIN, nécessiterait vraisemblablement une répétition des champs.
Merci à toi, patient éléphant (Berzemus).
La structure n'a pas changé depuis le premier message, voici des données réelles.
[code]CREATE TABLE `paroisses_feries` (
`id_ferie` int(11) NOT NULL auto_increment,
`id_paroisse` int(11) NOT NULL,
`Dte_Jour` int(11) NOT NULL,
`Dte_Mois` int(11) NOT NULL,
`Dte_Annee` int(11) NOT NULL,
`ferie_type` enum('Une fois','Annuel','Special') NOT NULL,
`Titre` varchar(10) NOT NULL,
`Details` varchar(50) NOT NULL,
PRIMARY KEY (`id_ferie`),
KEY `Calendrier` (`Dte_Mois`,`Dte_Jour`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Le calendrier des fêtes paroissiales et religieuses' AUTO_INCREMENT=190 ;
--
-- Contenu de la table `paroisses_feries`
--
INSERT INTO `paroisses_feries` (`id_ferie`, `id_paroisse`, `Dte_Jour`, `Dte_Mois`, `Dte_Annee`, `ferie_type`, `Titre`, `Details`) VALUES
(1, 1, 25, 8, 2008, 'Annuel', 'Assomption', 'Fête patronale de l`Assomption'),
(2, 1, 24, 6, 2008, 'Annuel', 'St-Jean', 'Saint-Jean Baptiste'),
(3, 1, 25, 12, 2008, 'Annuel', 'Noël', 'La Nativité de notre Seigneur Jésus'),
(4, 1, 1, 1, 2008, 'Annuel', 'Nouvel An', 'Nouvelle année'),
(5, 1, 2, 11, 2007, 'Annuel', 'Fête morts', 'Commémoration des fidèles défunts'),
(7, 1, 15, 4, 1990, 'Une fois', 'Pâques', 'La Résurrection de notre Seigneur');
[/code]