Affichage d'une seule valeur requête PHP

Paradox_Ma
Invité n'ayant pas de compte PHPfrance

19 nov. 2009, 15:13

Bonjour,

Je suis en train de développer une interface qui me permet d'afficher les films et l'heure de LA prochaine séance. Avec le code ci-dessous, j'arrive à obtenir les prochaines séances des films, mais je voudrai en fait récupérer uniquement la 1ére séance.
$heure_seance= mysql_query("SELECT seance.Horaire FROM film, film_seance, seance WHERE film.IDFilm=film_seance.IDFilm AND seance.IDSeance = film_seance.IDSeance AND '$horaire_actuel' < seance.Horaire ORDER BY film.etat, seance.Horaire ASC" );
$nb_seance = mysql_num_rows($heure_seance);
if(isset($nb_seance))
 {
 
    echo '<tr>';
   while($row = mysql_fetch_array($heure_seance)) 
   {    
		// if (($heure.':' .$minute)<$row["Horaire"])
		 //	{
			 echo '<td>Prochaine séance : '.$row["Horaire"].'</td>';
		//	 }else{
		//	 echo '<td>Aucune séance</td>';
			// }
			 
			 
		 
		 
  
    }
	echo '</tr>';	
}
J'ai essaye le TOP 1, mais ça ne fonctionne pas.

Merci

Mammouth du PHP | 568 Messages

19 nov. 2009, 15:33

L'option TOP ne fonctionne que sous MSSQL, pour MYSQL il te faut faire un LIMIT 0,1 (cf la documentation officiel) et n'oublie pas de trier sur la date (ici sur l'horaire) afin de récupérer seulement le prochain horaire.

Invité
Invité n'ayant pas de compte PHPfrance

19 nov. 2009, 16:10

Merci pour l'info, le souci c'est quand j'applique le code suivant (voir en dessous), seul l'horaire du 1er film apparait !
$localtime = localtime();
$minute =  $localtime[1];
$heure =  $localtime[2];

$horaire_actuel=($heure.':' .$minute);

$heure_seance= mysql_query("SELECT seance.Horaire FROM film, film_seance, seance WHERE film.IDFilm=film_seance.IDFilm AND seance.IDSeance = film_seance.IDSeance AND '$horaire_actuel' < seance.Horaire ORDER BY film.etat, seance.Horaire ASC LIMIT 0,1" );
$nb_seance = mysql_num_rows($heure_seance);
if(isset($nb_seance))
 {
 
    echo '<tr>';
   while($row = mysql_fetch_array($heure_seance)) 
   {    
		// if (($heure.':' .$minute)<$row["Horaire"])
		 //	{
			 echo '<td>Prochaine séance : '.$row["Horaire"].'</td>';
		//	 }else{
		//	 echo '<td>Aucune séance</td>';
			// }
			 
			 
		 
		 
  
    }
	echo '</tr>';	
}

Mammouth du PHP | 568 Messages

19 nov. 2009, 17:03

Tu cherche à affiché pour chaque film, la première séance donc.

Effectivement le LIMIT à sa limte ^^

Plus concrètement, passe par une sous-requête qui elle ne te renvoie que la première séance pour chaque film, je ferais qq chose du genre:
SELECT film_libelle, seance.Horaire FROM film, film_seance, seance WHERE film.IDFilm=film_seance.IDFilm AND seance.IDSeance = film_seance.IDSeance AND film.IDFilm IN (SELECT film.IDFilm FROM film, film_seance, seance WHERE film.IDFilm=film_seance.IDFilm AND seance.IDSeance = film_seance.IDSeance AND '$horaire_actuel' < seance.Horaire ORDER BY film.etat, seance.Horaire ASC LIMIT 0,1)
Ici, la requête principal va lister tous les films, et pour chaque film tu va récupérer l'horaire suivant.

PS: pas tester mais un truc dans ce genre devrait fonctionner

Invité
Invité n'ayant pas de compte PHPfrance

19 nov. 2009, 17:11

Parfait, l'idée est bonne !!!

En insérant ce code :
$heure_seance= mysql_query("SELECT seance.Horaire FROM film, film_seance, seance WHERE film.IDFilm=film_seance.IDFilm AND seance.IDSeance = film_seance.IDSeance AND film.IDFilm IN (SELECT seance.Horaire FROM film, film_seance, seance WHERE film.IDFilm=film_seance.IDFilm AND seance.IDSeance = film_seance.IDSeance AND '$horaire_actuel' < seance.Horaire ORDER BY film.etat, seance.Horaire ASC LIMIT 0,1)" );
J'ai l'erreur suivante :

Code : Tout sélectionner

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\cinesoft\front\index.php on line 83
Je n'ai pas encore vu sur les tuto, mais je pense que la synthaxe du "IN" n'est pas correcte ?

Mammouth du PHP | 568 Messages

19 nov. 2009, 17:55

Parfait, l'idée est bonne !!!

En insérant ce code :
$heure_seance= mysql_query("SELECT seance.Horaire FROM film, film_seance, seance WHERE film.IDFilm=film_seance.IDFilm AND seance.IDSeance = film_seance.IDSeance AND film.IDFilm IN (SELECT seance.Horaire FROM film, film_seance, seance WHERE film.IDFilm=film_seance.IDFilm AND seance.IDSeance = film_seance.IDSeance AND '$horaire_actuel' < seance.Horaire ORDER BY film.etat, seance.Horaire ASC LIMIT 0,1)" );
J'ai l'erreur suivante :

Code : Tout sélectionner

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\cinesoft\front\index.php on line 83
Je n'ai pas encore vu sur les tuto, mais je pense que la synthaxe du "IN" n'est pas correcte ?
Non, le soucis vient surement du fait que le IN compare (ici) film.IDFilm avec seance.Horaire...

Il te faut comparer l'id du film dans la requête avec un id de film dans ta sous requête.

EDIT: test ta requête dans ta base de donnée jusqu'à ce qu'elle fonctionne.

Invité
Invité n'ayant pas de compte PHPfrance

22 nov. 2009, 20:33

Hello,

Franchement, j'ai tout essayé, je n'arrive pas à obtenir le résultat souhaité.

Une petite aide s'impose :(

Merci

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

22 nov. 2009, 21:36

Tu as fait ça :
EDIT: test ta requête dans ta base de donnée jusqu'à ce qu'elle fonctionne.
Là tu verras le message d'erreur qui te sera très utile, ainsi qu'à nous pour t'aider... les étapes à suivre pour débugguer son listées dans un post-it en haut du forum, merci de le lire :!:

Invité
Invité n'ayant pas de compte PHPfrance

26 nov. 2009, 14:26

Bonjour,

Je suis désolé d'avoir pris du temps pour répondre.

En fait, aucun message d'erreur n'apparait. Je n'arrive pas à obtenir le résultat que je souhaite parce que (je pense que) la logique dans laquelle j'ai édité mon code (PHP et/ou requête Mysql) n'est pas "adéquate".

Je voudrai dans un tableau afficher les éléments suivants :

Titre du Film
Heure de la prochaine séance

Jusqu'à présent, voila comme j'ai codé en PHP pour obtenir mon tableau avec la liste des films :
<?php include("Connections/cinesoft_bdd.php");
	echo '<table border="1">';


$titre= mysql_query("SELECT film.* FROM film ORDER BY etat");
$nb_titre = mysql_num_rows($titre);
if($nb_titre)
 {
    echo '<tr>';
   while($row = mysql_fetch_array($titre)) 
   	{         
		 echo '<td>'.$row["Titre"].'</td>';
  
     }
	echo '</tr>';	
}
En dessous, je voudrai afficher les horaires (en comparons avec l'heure actuelle) de la prochaine séance pour chaque film affiché, en suivant cet algorithme :
Afficher une seule valeur de "Film_Seance.Horaire" QUI REPOND A : Film_Seance.Horaire > $horaire_actuel (obtenue par le code suivant

Code : Tout sélectionner

$localtime = localtime(); $minute = $localtime[1]; $heure = $localtime[2]; $horaire_actuel=($heure.':' .$minute);
Or avec le code que j'ai mis :
$heure_seance= mysql_query("SELECT seance.Horaire, film_seance.IDFilm FROM film, film_seance, seance WHERE film.IDFilm=film_seance.IDFilm AND seance.IDSeance = film_seance.IDSeance AND seance.Horaire > '$horaire_actuel' GROUP BY film_seance.IDFilm ORDER BY Film.Etat");
avec un affichage comme suit :
$nb_seance = mysql_num_rows($heure_seance);
if(isset($nb_seance))
 {
 
    echo '<tr>';
   while($row = mysql_fetch_array($heure_seance)) 
   {    
		// if (($heure.':' .$minute)<$row["Horaire"])
		 //	{
			 echo '<td>Prochaine séance : '.$row["Horaire"].' </td>';
		//	 }else{
		//	 echo '<td>Aucune séance</td>';
			// }
			 
			 
		 
		 
  
    }
	echo '</tr>';	
}
Le résultat retourné est :
La véritable histoire du Chat Botté | Twilight : Tentation | Alf Mabrouk
Prochaine séance : 19:45
Le résultat est bon, car il m'affiche uniquement la séance qui répond à la condition "> heure actuelle", par contre, il n'affiche pas les séances (qui répondent à la condition) pour les films suivants (Twilight et Alf Mabrouk).

J'espère avec été clair dans la description de mon problème.

Merci encore pour votre aide.

Invité
Invité n'ayant pas de compte PHPfrance

26 nov. 2009, 15:09

Je tiens à completer l'info :

J'ai l'impression qu'il n'y aucun lien entre le Film affiché et l'horaire.

En somme, si l'horaire du 1er film affiché est "vide" alors il m'affiche l'horaire du 2nd film dans la case qui est réservé au 1er film !

Est-ce un problème lié à mon code PHP ?

Merci