Page 1 sur 3

Moteur de recherche sur dates

Posté : 23 juin 2010, 11:22
par fabrice88250
bonjour,
j'ai un base de données dans laquelle je rentre des données qui contiend un champ heure_diff au format datetime.

voilà ma table :
CREATE TABLE `wintitres` (
  `ID` int(6) NOT NULL AUTO_INCREMENT,
  `artist` varchar(50) collate latin1_general_ci NOT NULL,
  `title` varchar(50) collate latin1_general_ci NOT NULL,
  `heure_diff` datetime NOT NULL,
  `duree` time NOT NULL,
  PRIMARY KEY  (`ID`)
) ;


Je voudrais créé un petit moteur de recherche qui serait basé sur le champ heure_diff.
par exemple je voudrai que les internautes puissent si il veulent savoir qu'elle titre est passé vers 14h30 le 1 mai 2010. On afficherait tous les titres ayant passé dans un interval de 30 minutes en fonction du choix des 14h30.

Voilà se que j'ai fait pour le moment niveau formulaire mais j'imagine qu'on doit mieu faire je pense avoir des probleme au niveau du deroulant par la suite.
<form action="recherche-titre.php" method="post" enctype="multipart/form-data">
  <label>Date
  <select name="Date" id="Date">
        <?php
        setlocale(LC_TIME, 'fr_FR.UTF-8'); 
        $reqdate = mysql_query("SELECT * FROM wintitres"); 
        while( $resdate = mysql_fetch_array( $reqdate ) )
        {
                $hdiff = ucwords(strftime("%d %B %Y", strtotime($resdate['heure_diff'])))
        ?>    
        <option value="<?php echo $hdiff;?>">
        <?php echo $hdiff;?>
        </option>
        <?php } ?>  
        </select>
  </label>
  <input name="submit" type="submit" value="Rechercher" />
  </form>


pouvez vous m'aider à mettre le reste en place ...? et corriger si possible mon formulaire pour qu'il soir fonctionnel.

Re: Moteur de recherche sur dates

Posté : 23 juin 2010, 21:45
par Aureusms
Je comprends pas trop du dis vouloir utilisé le champ heure_diff mais tu ne l'inclut pas dans ta requète.
Que veux tu exactement ?

Re: Moteur de recherche sur dates

Posté : 23 juin 2010, 21:49
par fabrice88250
effectivement là c'est juste le formulaire pour la recherche que je vous ai présenté.

sinon j'ai fais d'autres essai mais .... j'arrive a rien !

voilà mon nouvel essai :
 
<form action="recherche-titre.php" method="post" enctype="multipart/form-data">
  <label>Date
  <select name="Date" id="Date">
		<?php
        $reqdate = mysql_query("SELECT heure_diff FROM wintitres"); 
        while( $resdate = mysql_fetch_array( $reqdate ) )
        {	
        ?>    
        <option value="<?php echo $resdate['heure_diff'];?>">
		<?php echo $resdate['heure_diff'];?>
        </option>
        <?php } ?>  
	</select>
  </label>
  <input name="submit" type="submit" value="Rechercher" />
  </form>

    <?PHP 
    $date = $_POST['Date'];
	echo 'Date selectionnée : '.$date;

	$requete = "SELECT * FROM wintitres WHERE 'heure_diff'='$date'"; 
	mysql_query($requete) or die('Erreur SQL !'.$requete.' '.mysql_error()); 
	echo '<br/>La requete sql : '.$requete;
		while($result = mysql_fetch_array($requete))
		{
		echo $result['artist']. ' - ' .$result['title'].' - ' .$result['duree'].'<br/>';
		} ?>

le hic c'est que je n'i pas de résultats !

Re: Moteur de recherche sur dates

Posté : 23 juin 2010, 21:51
par Aureusms
Que donne un echo de $requete = "SELECT * FROM wintitres WHERE 'heure_diff'='$date'";

Re: Moteur de recherche sur dates

Posté : 23 juin 2010, 22:28
par fabrice88250
le resultat donne :
La requete sql : SELECT * FROM wintitres WHERE 'heure_diff'='2010-06-17 15:15:25'

Re: Moteur de recherche sur dates

Posté : 23 juin 2010, 22:49
par Aureusms
Essaye cette requete
<?PHP
    $date = $_POST['Date'];
        echo 'Date selectionnée : '.$date;
    $timestamp = strtotime ($date);
    //30 minutes = 30 x 60 secondes = 1800 secondes
   $timestamp_debut = $timestamp-1800;
   $timestamp_fin = $timestamp+1800;
   //pour respecter le format : '2010-06-17 15:15:25'
   $date_debut = date ("Y-m-d h:m:s",$timestamp_debut);  
   $date_fin= date ("Y-m-d h:m:s",$timestamp_fin);

    $requete = "SELECT * FROM wintitres WHERE 'heure_diff' BETWEEN '$date_debut' AND '$date_fin'"; 

Re: Moteur de recherche sur dates

Posté : 23 juin 2010, 22:55
par fabrice88250
alors en essayant avec ta requete j'ai :
La requete sql : SELECT * FROM wintitres WHERE 'heure_diff' BETWEEN '2010-06-17 02:06:25' AND '2010-06-17 03:06:25'
lorsque la date dans le select est = à 2010-06-17 15:15:25
je n'ai aucune affichage de resultat.

Re: Moteur de recherche sur dates

Posté : 23 juin 2010, 23:10
par stealth35
2010-06-17 15:15:25 est hors de la condition

Re: Moteur de recherche sur dates

Posté : 23 juin 2010, 23:12
par fabrice88250
oui mais le probleme c'est que $date_debut et date_fin son en fonction de date. le calcul ne se fait donc pas correctement ou alors il y un bug...
en fait par la suite je veus que dans mon formulaire on ait que la date dans le champ select et j'ajouterai un champ heure et un champ minutes pour precisier la recherche.
En gros je voudrai faire un truc du meme genre que cette radio : radio

Re: Moteur de recherche sur dates

Posté : 23 juin 2010, 23:22
par stealth35
pas besoin de faire des calcule avec php, d'ailleurs c'est pas bon puisque lors d'un changement d'heure ca ira pas
SELECT * 
FROM wintitres 
WHERE 'heure_diff' BETWEEN ('$date'  - INTERVAL 30 MINUTE) AND ('$date' + INTERVAL 30 MINUTE)
si ta $date = 2010-06-17 15:15:25
il ira chercher entre 2010-06-17 14:45:25 et 2010-06-17 15:45:25

Re: Moteur de recherche sur dates

Posté : 23 juin 2010, 23:27
par fabrice88250
... ok mais comment on ecrit l'interval ?
est ce que sa ne serait pas plus simple de faire comme sur ce site : recherche
c'est exactement ça que je veu faire en fait mais.... je rame a fond !!!!!

Re: Moteur de recherche sur dates

Posté : 23 juin 2010, 23:29
par stealth35
... ok mais comment on ecrit l'interval ?
est ce que sa ne serait pas plus simple de faire comme sur ce site : recherche
c'est exactement ça que je veu faire en fait mais.... je rame a fond !!!!!
ca j'écris comme ca :wink: , ce que j'ai mis c'est ta requête

http://dev.mysql.com/doc/refman/5.0/fr/ ... tions.html
mysql> SELECT '1997-12-31 23:59:59' + INTERVAL 1 SECOND;
-> '1998-01-01 00:00:00'

Re: Moteur de recherche sur dates

Posté : 24 juin 2010, 08:33
par fabrice88250
re, bon alors j'y arrive toujours pas.
j'ai ecris la requete et j'ai rien qui ressort ! j'ai mis
    $requete = "SELECT * FROM wintitres WHERE 'heure_diff' BETWEEN ('$date'  - INTERVAL 30 MINUTE) AND ('$date' + INTERVAL 30 MINUTE)"; 
et j'ai 0 resultat !
La requete sql : SELECT * FROM wintitres WHERE 'heure_diff' BETWEEN ('2010-06-30 16:12:01' - INTERVAL 30 MINUTE) AND ('2010-06-30 16:12:01' + INTERVAL 30 MINUTE) 
au final je prefererai faire directement le systeme comme sur le site que je vous ai indiqué car là, je sature et je n'arrive a rien.

je voudrai donc mon formulaire avec 3 champs select (ca sa devrait aller):
1 qui propose les dates antérieurs à 30 jours (qui se fait automatiquement en fonction de la date du jour)
1 qui propose les heures sur 24 h
1 qui propose les minutes par tranche de 15 minutes.

Puis (la sa va plus)
ensuite l'internaute choisit sa date, une heure et des mintes, il clique sur rechercher et on lui affiche tout les titres correspondant au jour selectionné et qui sont compris dans un interval de +ou- 15 minutes en fonction de l'heure et les minutes qu'il aura choisit.

Re: Moteur de recherche sur dates

Posté : 24 juin 2010, 10:02
par fabrice88250
re,
alors j'ai fini mon formulaire et maintenant je passe a la partie requete ou j'ai besoin de votre coup de main.

actuellement j'en suis là :
<form action="recherche-titre.php" method="post" enctype="multipart/form-data">
	<label>Date
	<select name="Date" id="Date">
	<?php for($i = 0; $i <= 30; $i++) { ?> 
	<option value="<?PHP echo date('d/m/Y',strtotime('-'.$i.' days'));?>">
	<?PHP 	echo date('d/m/Y',strtotime('-'.$i.' days'));?>
	</option>
	<?PHP } ?> 
	</select>
	</label>
  
	<label>Heure
	<select name="heure" id="heure">
	<?php for($h = 0; $h <= 23; $h++) { ?> 
    <!-- sprintf %02d pour l'affichage sur 2 caractères-->
	<option value="<?PHP echo sprintf("%02d", $h);?>">
	<?PHP echo sprintf("%02d", $h);?>
	</option>
	<?PHP } ?> 
	</select>
	</label>
  
	<label>Minutes
	<select name="minutes" id="minutes">
	<?php for($m = 00; $m <= 55; $m+=05) { ?> 
    <!-- sprintf %02d pour l'affichage sur 2 caractères-->
	<option value="<?PHP echo sprintf("%02d", $m);?>">
	<?PHP echo sprintf("%02d", $m);?>
	</option>
	<?PHP } ?> 
	</select>
	</label>

  <input name="submit" type="submit" value="Rechercher" />
</form>  
  

    <?PHP 
    $date = $_POST['Date'];
    $heure = $_POST['heure'];
    $minutes = $_POST['minutes'];
	echo 'Vous recherchez un titre qui est passé le ' .$date. ' vers ' .$heure. ' : ' .$minutes;
	//requete en fonction de 'heure_diff' qui est au format datetime dans la base de donnée
    $requete = "?????????????????????????"; 
	mysql_query($requete) or die('Erreur SQL !'.$requete.' '.mysql_error()); 
	echo '<br/>La requete sql : '.$requete;
		while($result = mysql_fetch_array($requete))
		{
		echo $result['artist']. ' - ' .$result['title'].' - ' .$result['duree'].'<br/>';
		} ?>
   

Re: Moteur de recherche sur dates

Posté : 24 juin 2010, 10:20
par stealth35
la requete c'est la meme, ta juste $date a bien formater, t'as vraiment des évènement autour de 2010-06-30 16:12:01 ? y'a moyen d'envoyer un petit de ta base ?