Je suis en train d'essayer de trouver comment améliorer la requête et également réparé un bug que je rencontre.
Voici ma base de donnée actuelle.
CREATE TABLE IF NOT EXISTS `evenement` (
`id_evenement` int(11) NOT NULL auto_increment,
`agenda_id` int(11) NOT NULL,
`objet` varchar(255) collate utf8_unicode_ci NOT NULL,
`description` longtext collate utf8_unicode_ci NOT NULL,
`debut` datetime NOT NULL,
`fin` datetime NOT NULL,
PRIMARY KEY (`id_evenement`),
KEY `agenda_id` (`agenda_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=69856 ;
La requête ci-dessous permet de vérifier si un rendez-vous est déjà enregistré entre 2 créneaux ou pas.
<?php
$requete="SELECT
count(objet) as nb_objet
FROM
evenement e
LEFT JOIN agenda a ON a.id_agenda = e.agenda_id
WHERE
a.user_id = '".$_POST['id_user']."'
AND (e.debut BETWEEN '".$datedepart."' AND '".$datefin."'
OR e.fin BETWEEN '".$datedepart."' AND '".$datefin."'
OR (e.debut<'".$datedepart."' AND e.fin>'".$datefin."')
)";
?>
Cependant elle me pose un tout petit problème.
Voici un exemple, j'ai un rendez vous qui fini à 9h00. Le suivant commence à 9h15. Jusque là pas de soucis, sauf que lors de la vérification du créneau 9h/9h15, visuellement, il n'y a pas de rendez-vous mais la requete me renvoie qu'il y a bien un rendez vous.
Comment modifier la requête pour quelle évite ce type de problème?
Merci d'avance.
lemirandais
Résolu
SELECT COUNT( objet ) AS nb_objet
FROM evenement e
LEFT JOIN agenda a ON a.id_agenda = e.agenda_id
WHERE a.user_id = '1'
AND (
(
e.debut > '2010-07-31 09:00:00'
AND e.debut < '2010-07-31 11:15:00'
)
OR (
e.fin < '2010-07-31 09:00:00'
AND e.fin > '2010-07-31 11:15:00'
)
OR (
e.debut < '2010-07-31 09:00:00'
AND e.fin > '2010-07-31 11:15:00'
)
)
Dommage, impossible de mettre ma signature
Amélioration d'une requete.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.