à partir de http://www.phpfrance.com/forums/viewtopic.php?t=17689, j'ai construit une requête qui fonctionne bien lorsque la valeur médiane se trouve flanquée d'une valeur plus grande et d'une valeur plus petite. Lorsqu'on arrive en bout de ligne, cependant, ça ne donne plus aucun résultat.
Voici plus de détails: je veux repérer dans un table des débits de rivières les inscriptions faites pour une rivière X dont le débit est plus faible (première valeur) ou dont le débit est plus fort (seconde valeur). Le but de cela est d'offrir un lien sur la page qui mène au schema "Voir la situation dans le cas d'un débit plus faible" et bien sûr "Voir la ... débit plus fort".
Voici la structure de la table avec quelques données ( MySQL )
Code : Tout sélectionner
-- phpMyAdmin SQL Dump
-- version 2.11.3deb1ubuntu1
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Dim 31 Août 2008 à 21:20
-- Version du serveur: 5.0.51
-- Version de PHP: 5.2.4-2ubuntu5.3
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Base de données: `daniel`
--
-- --------------------------------------------------------
--
-- Structure de la table `kayak_releves`
--
CREATE TABLE IF NOT EXISTS `kayak_releves` (
`id_releve` int(11) NOT NULL auto_increment,
`id_rapide` int(11) NOT NULL,
`Debit` decimal(10,1) NOT NULL,
`Unite` varchar(20) NOT NULL default 'm<sup>3</sup>/s',
`auteur` int(11) NOT NULL,
`creation` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
`photo` varchar(30) NOT NULL,
`Approche` text NOT NULL,
`Negociation` text NOT NULL,
`Sortie` text NOT NULL,
PRIMARY KEY (`id_releve`),
KEY `Niveau_croiss` (`id_rapide`,`Debit`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=44 ;
--
-- Contenu de la table `kayak_releves`
--
INSERT INTO `kayak_releves` (`id_releve`, `id_rapide`, `Debit`, `Unite`, `auteur`, `creation`, `photo`, `Approche`, `Negociation`, `Sortie`) VALUES
(1, 11, 130.0, 'm<sup>3</sup>/s ', 999, '2008-08-29 11:44:53', '', '', '', ''),
(2, 11, -1.5, 'm<sup>3</sup>/s ', 999, '2008-08-29 11:44:41', '', '', '', ''),
(43, 6, 120.0, 'm<sup>3</sup>/s', 999, '2008-08-31 20:22:33', '1_6_43_999.jpeg', 'Entrons en matière', 'Négocions bien', 'Et tout finira bien'),
(42, 6, 100.0, 'm<sup>3</sup>/s', 999, '2008-08-31 20:22:33', '1_6_42_999.jpeg', 'Entrons en matière', 'Négocions bien', 'Et tout finira bien'),
(41, 6, 130.0, 'm<sup>3</sup>/s', 999, '2008-08-29 14:21:27', '1_6_41_999.jpeg', 'Entrons en matière', 'Négocions bien', 'Et tout finira bien'),
(40, 6, 200.0, 'm<sup>3</sup>/s', 999, '2008-08-31 20:22:33', '1_6_40_999.jpeg', 'Entrons en matière', 'Négocions bien', 'Et tout finira bien'),
(39, 6, 600.0, 'm<sup>3</sup>/s', 999, '2008-08-31 20:22:33', '1_6_39_999.jpeg', 'Entrons en matière', 'Négocions bien', 'Et tout finira bien'),
(38, 6, 130.0, 'm<sup>3</sup>/s', 999, '2008-08-29 14:12:01', '1_6_38_999.jpeg', 'Entrons en matière', 'Négocions bien', 'Et tout finira bien'),
(37, 6, 130.0, 'm<sup>3</sup>/s', 999, '2008-08-29 14:01:17', '1_6_37_999.jpeg', 'Entrons en matière', 'Négocions bien', 'Et tout finira bien');
et ma requête
Code : Tout sélectionner
SELECT Petit.Debit AS Pdebit, Grand.Debit AS Gdebit, Petit.id_releve AS Pid, Grand.id_releve AS Gid
FROM (
SELECT *
FROM kayak_releves
WHERE id_releve =40
) AS Ceci
JOIN (
SELECT *
FROM kayak_releves
WHERE id_rapide =6
) AS Grand ON Ceci.Debit < Grand.Debit
JOIN (
SELECT *
FROM kayak_releves
WHERE id_rapide =6
) AS Petit ON Ceci.Debit > Petit.Debit
ORDER BY Pdebit DESC , Gdebit ASC Dans le cas présent, ça fonctionne (id_releve = 40), mais je n'obtiens aucun résultat dans le cas d'un id_releve = 39 alors que le débit de l'enregistrement est moindre que celui du 39.
Bien sûr, je pourrais faire deux requêtes, ce serait plus simple, mais ça exigerait deux fois plus du serveur.
Comment arriver à mes fins?
Merci à l'avance.