IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Trier mes résultats


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Par défaut Trier mes résultats
    Bonjour, j'ai dernièrement repris une système de gestion de réservation de bateaux qui date maintenant d'une petite dizaine d'années, le code est rempli de requêtes imbriquées et la base de donnée mal organisée.
    Je voudrais classer les résultats des bateaux par prix, le problème, c'est que voilà :

    J'ai une fonction rempli de grosses requêtes imbriquées qui me permet de rechercher des bateaux qui conviendrais aux données de recherche demandé précédemment ( jour de départ, à quel quai partir, temps du voyage, ect. ). J'ai une autre fonctions qui me permet ensuite d'afficher ces bateaux un par un étant donné que la requête se trouve dans un WHILE. J'ai donc pensé à utiliser un array qui me permettrais de mettre tout les résultat dans un seul tableau pour ensuite pouvoir intégrer un système de tri, mais je m'en sort pas vraiment. Si des gens pouvait m'aider, merci d'avance.

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 48
    Par défaut
    Nous t'aiderions volontiers mais sans code ça parait compliqué pour nous ^_^

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Par défaut
    Bah je te dit c'est un vieux code tout brouillon, il marche mais il y a plein de code inutile et tout, enfin voilà, si je te met tout le code tu va prendre peur et personne viendra m'aider, c'est près de 1000 lignes que bien réfléchi, tu fait pareil avec près de 500.
    Enfin, voici la fonction qui permet d'afficher les bateaux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    function writeBateau($TabBateauxDispos, $dateTimeDebut, $dateTimeFin, $libelleSejour)
    	{
    		global $_LANGUE;
    		static $i = 0;
    		$numBateau = $TabBateauxDispos["numbateau"];
    		$dateTimeChoisie = mktime(0, 0, 0, $_SESSION['mois_select'], $_SESSION['jour_select'], $_SESSION['annee_select']);
    		$reqBateau = mysql_query("SELECT numbateau, numproprietaire, numgroupe, basedefaut, modele, nbpersonnesmax, cabines, lien
    								  FROM bateau
    								  WHERE numbateau=$numBateau");
    		$resBateau = mysql_fetch_array($reqBateau);
    		// On va chercher les paramètres du loueur (calcul de convoyage)
    		$reqParametres = mysql_query("SELECT compterconvoyage, compternbconvoyages
    									  FROM parametres
    									  WHERE numproprietaire=".$resBateau['numproprietaire']);
    		$resParametres = mysql_fetch_array($reqParametres);
    		if ($resParametres['compterconvoyage'])
    		{
    			print("<SCRIPT LANGUAGE='JavaScript'>
    				var compterConvoyage = true;
    			</SCRIPT>");
    		}
    		else
    		{
    			print("<SCRIPT LANGUAGE='JavaScript'>
    				var compterConvoyage = false;
    			</SCRIPT>");
    		}
    		// On va chercher une photo
    		$reqPhoto = mysql_query("SELECT path
    								 FROM photo
    								 WHERE numphoto IN (SELECT numphoto
    													FROM illustrer
    													WHERE numbateau=$numBateau
    												   )
    								 ORDER BY RAND()
    								 LIMIT 1");
     
    		// On récupère le séjour
    		$reqSejour = mysql_query("SELECT *
    								  FROM sejour
    								  WHERE libelle='$libelleSejour'
    									AND numproprietaire=".$resBateau['numproprietaire']);
    		$resSejour = mysql_fetch_array($reqSejour);
    		// On récupère toutes les périodes sur lesquelles s'étale le séjour
    		$reqPeriode = mysql_query("SELECT numperiode, datedebut, datefin
    								   FROM periode
    								   WHERE (('".date("Y-m-d", $dateTimeDebut)."' BETWEEN datedebut AND datefin
    										   OR '".date("Y-m-d", $dateTimeFin)."' BETWEEN datedebut AND datefin)
    										  OR ((datedebut BETWEEN '".date("Y-m-d", $dateTimeDebut)."' AND '".date("Y-m-d", $dateTimeFin)."'
    											  OR datefin BETWEEN '".date("Y-m-d", $dateTimeDebut)."' AND '".date("Y-m-d", $dateTimeFin)."')))
    									 AND numproprietaire=".$resBateau['numproprietaire']."
    								   ORDER BY datedebut ASC");
     
    		print("<SCRIPT LANGUAGE='JavaScript'>
    			TabNumPromoDivers[$numBateau] = new Array();
    			TabPrixPromoDivers[$numBateau] = new Array();
    			TabPrixPeriode[$numBateau] = new Array();
    		</SCRIPT>");
    		//	On parcourt les périodes
    		$prixLocation = 0;
    		$promoDuree = 0;
    		$promoEarlyBooking = 0;
    		$promoDiversLocation = 0;
    		$joursComptes = 0;
    		$dateTimeEnCours = $dateTimeDebut;
    		$nbJoursAvantDepart = diffDateTime($dateTimeDebut, mktime(0, 0, 0));
    		$nbJoursSejour = diffDateTime($dateTimeFin, $dateTimeDebut);
    		// TABLEAUX
    		// divers
    		$TabNumPromoDivers = array();
    		$TabPrixPromoDivers = array();
    		$numPromoDivers = array();
    		$prixPromoDivers = array();
    		// Période
    		$TabPrixPeriode = array();
    		while ($resPeriode = mysql_fetch_array($reqPeriode))
    		{
    			// Recherche du tarif
    			$reqTarif = mysql_query("SELECT prix
    									 FROM tarif
    									 WHERE numsejour=".$resSejour['numsejour']."
    									   AND numoffre IN (SELECT numoffre
    														FROM offre
    														WHERE numperiode=".$resPeriode['numperiode']."
    														  AND numbateau=$numBateau
    													   )");
    			$resTarif = mysql_fetch_array($reqTarif);

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 48
    Par défaut
    Effectivement y'a des lignes un peu superflues !

    Que veux-tu faire avec ton dernier fetch_array ?

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2012
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 5
    Par défaut
    Et encore, tu as rien vu ! ^^
    Il me permet ensuite de calculer un prix de location à la journée ou à la semaine, selon la période de location en gros.
    Voila le plus gros morceaux de la fonction qui permet de récupérer les bateaux dispo, si ça peut t'aider.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
    while ($resBaseDepart = mysql_fetch_array($reqBaseDepart))
    		{
    			$requeteBaseArrivee = "SELECT nom
    								   FROM base
    								   WHERE numzone=$numZone
    									 AND numproprietaire IN (SELECT numproprietaire
    															 FROM inscrire
    															 WHERE numprestataire=".__NUMPRESTATAIRE__."
    															)";
    			// On va chercher tous les bateaux au départ de cette base
    			$requeteBateau = "SELECT numbateau, numgroupe, numproprietaire
    							  FROM bateau
    							  WHERE numproprietaire IN (SELECT numproprietaire
    														FROM inscrire
    														WHERE numprestataire=".__NUMPRESTATAIRE__."
    													   )
    								AND numbateau IN (SELECT numbateau
    												  FROM offre
    												  WHERE numperiode IN (SELECT numperiode
    																	   FROM periode
    																	   WHERE '$dateDebut' BETWEEN datedebut AND datefin
    																		 AND '$dateDebut' != datefin
    																	  )
    													AND numoffre IN (SELECT numoffre
    																	 FROM tarif
    																	 WHERE numsejour IN (SELECT numsejour
    																						 FROM sejour
    																						 WHERE libelle LIKE '$libelleSejour'
    																						   AND (jourdepart IS NULL
    																								OR jourdepart IS NOT NULL AND jourdepart='".JourToStrFR(date("w", $dateTimeDebutTest))."'
    																							   )
    																						)
    																	)
    												 )
    								AND numbateau IN (SELECT numbateau
    												  FROM offre
    												  WHERE numperiode IN (SELECT numperiode
    																	   FROM periode
    																	   WHERE '$dateFin' BETWEEN datedebut AND datefin
    																		 AND '$dateFin' != datedebut
    																	  )
    													AND numoffre IN (SELECT numoffre
    																	 FROM tarif
    																	 WHERE numsejour IN (SELECT numsejour
    																						 FROM sejour
    																						 WHERE libelle LIKE '$libelleSejour'
    																						   AND (jourdepart IS NULL
    																								OR jourdepart IS NOT NULL AND jourdepart='".JourToStrFR(date("w", $dateTimeDebutTest))."'
    																							   )
    																						)
    																	)
    												 )
    								AND numbateau NOT IN (SELECT numbateau
    													  FROM reservation
    													  WHERE ('$dateDebut $heureD' BETWEEN datedepart AND datearrivee
    															 OR '$dateFin $heureF' BETWEEN datedepart AND datearrivee
    															 OR datedepart BETWEEN '$dateDebut $heureD' AND '$dateFin $heureF'
    															 OR datearrivee BETWEEN '$dateDebut $heureD' AND '$dateFin $heureF'
    															)
    														AND NOT devis
    														AND NOT supprime
    													 )
    								AND numbateau NOT IN (SELECT numbateau
    													  FROM cachersite
    													 )
    								AND numbateau NOT IN (SELECT numbateau
    													  FROM entretien
    													  WHERE '$dateDebut' BETWEEN datedebut AND datefin
    														 OR '$dateFin' BETWEEN datedebut AND datefin
    														 OR datedebut BETWEEN '$dateDebut' AND '$dateFin'
    														 OR datefin BETWEEN '$dateDebut' AND '$dateFin'
    													 )
    								AND numbateau NOT IN (SELECT numbateau
    													  FROM cacher
    													  WHERE numprestataire=".__NUMPRESTATAIRE__."
    													 )";

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 48
    Par défaut
    P*t**n ça c'est d'la requête o_O

    Si la BDD est assez mal structurée, pourquoi ne pas revenir à la base et faire un nouveau MCD ?

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/10/2014, 17h13
  2. Trier le résultat d'une commande dir?
    Par Johns dans le forum Langage
    Réponses: 6
    Dernier message: 13/03/2006, 18h24
  3. [MySQL] Trier les résultats résultant d'une BDD
    Par florent dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/12/2005, 21h22
  4. Trier mes requete par date au format dd/mm/yy
    Par danje dans le forum Langage SQL
    Réponses: 6
    Dernier message: 19/09/2005, 19h06
  5. [TRIE] Trier un résultat selon certains termes
    Par narmataru dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 04/07/2005, 19h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo