Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 02/08/2007, à 23:57

Feral

[Résolu] PHP: Tri d'une table par liste externe...

Bonjour à tous!!

Je sais, le titre n'est pas claire du tout... Je vais essayer de m'expliquer. :-)
Je suis débutant...

J'ai un menu de sélection (flitrage) qui comprends plusieurs critères agissant sur des tables différentes mais qui se recoupent (langues, périodes...) et qui permettent de déterminer plusieurs ID d'une table principale contenant des objets répondant aux mulitiples critères...

Jusque là, pas trop de problème (juste un peu mal au crane). :-)

Par d'autres critères, je fais des moyennes de valeurs ou des choix de valeur qui donnent en final un prix qui doit me servir à trier les ID précédement obtenus.


Donc je me retrouve avec quelque chose comme ça:
(objet 1 - ID - prix)

melon - 23 - 5
stylo - 44 - 1
voiture - 1- 200

Donc, dans mes rêves les plus fous, j'aimerai :
- Trouver la possibilité de classer les ID par rapport aux prix obtenu (petit à grand),
- Puis demander l'affichage de tous les paramètres de la table d'objets dans l'ordre ou les ID se sont positionnés.

Je ne sais pas si c'est possible...
Je pensais peut-être créer une table "virtuelle" vue (http://www.w3schools.com/sql/sql_view.asp), y placer mes valeur puis faire une extraction de ma table principale par rapport aux ID de ma vue ... mais finalement je ne crois plus rien du tout... je ne sais pas trop comment faire... je suis paumé! :-)

Merci beaucoup pour votre aide!

Dernière modification par Feral (Le 03/08/2007, à 23:37)

Hors ligne

#2 Le 03/08/2007, à 07:03

stopher

Re : [Résolu] PHP: Tri d'une table par liste externe...

J'ai pas tout compris !!
tu as une Base de données ? donne la structure afin que je comprenne comment tu as reparties tes données .

Et as tu deja fais une requete ? pour avoir tes resultats ?

Hors ligne

#3 Le 03/08/2007, à 14:06

Feral

Re : [Résolu] PHP: Tri d'une table par liste externe...

OK, je vais essayer d'être plus claire.

J'ai:
- Une table lang qui défini différentes langues (mon site est en plusieurs langues et il est possible d'en ajouter ou enlever par interface admin)
- Une table menu qui défini le menu de filtrage dans les différentes langues (pour chaque langue choisi par le client, le menu et son contenu se traduit).
- Une table bien qui défini des villas à louer
- Une table periode qui défini les noms, début et fin de période (modif par admin)
- Une table price qui défini les prix pour chaque villa ((prx, prx1, prx2...prx5), prx étant prix total et prx1... prix pour 1 chambre)
- Une table details_villa qui défini les options des différentes villas

Note: Une villa 3 chambre peut être louée en 1, 2 ou 3 chambre et le prix diffère.

Donc, premièrement, par le menu, je crée une query sur les options (conditionnée aux choix du client) qui me donne la liste de ID des villas qui correspondent.
Jusque là, pas de problème.

Mais dans sa deuxième partie, le menu doit aussi me permettre d'ORDONNER automatiquement les choix du client:

1-
S'il sélectionne le nombre de chambre
  +Sélectionne une période => Classement des résultats par le prix de période pour le nombre de chambre sélectionné,
  +Ne sélectionne pas de période => Classement des résultats par le prix moyen sur toutes les périodes existantes, pour le nombre de chambre sélectionné,

2-
S'il ne sélectionne pas de nombre de chambre
  +Sélectionne une période => Classement des résultats par le prix de période pour le prix TOTAL de la villa (toutes les chambres)
  +Ne sélectionne pas de période => Classement des résultats par le prix moyen sur toutes les périodes existantes pour le prix TOTAL de la villa

Donc voilà, j'arrive à obtenir mes chiffre de classement mais comment les utiliser pour classer???

Mon organisation est la suivante:
menu.php=>main.php
Ils sont tous les deux inclus dans index.php

Voici le code de menu.php:

<?php

//-------------------------------------------------------------//
////////////  Vérification I : IL S'AGIT DE : VILLA  ////////////
//-------------------------------------------------------------//

if ($_SESSION['cat'] == 'villa')
{
$mchoice = mysql_query('SELECT * FROM mchoice WHERE mchcat=\'' . $_SESSION['cat'] . '\' AND mchidlang=\'' . $_SESSION['idlang'] . '\' ;');
$mchoiceout = mysql_fetch_array($mchoice);

?>

<form action="index.php" method="post">

<?php
//CHOIX DU BIEN//
if (isset($_POST['idbien'])) {$idbien=$_POST['idbien'];} else {$idbien="0";}
?>

<p>
<label for="idbien"><?php echo $mchoiceout['mch1']; ?></label>
<select name="idbien" id="idbien" style="width:70px">
	<option value="0"> - </option>

	<?php
	$retour1 = mysql_query('SELECT * FROM bien WHERE cat=\'' . $_SESSION['cat'] . '\' AND active=1 ORDER BY name;');
	while ($donnees1 = mysql_fetch_array($retour1))
		{
		echo '<option value="' . $donnees1['id'] . '" ';
		if ($idbien == $donnees1['id'])
			{
			echo 'selected="selected"';
			}
		echo '>' . $donnees1['name'] . '</option><br/>';
		}
	?>
</select>
</p>

<?php
//CHOIX AREA//
if (isset($_POST['areaid'])) {$areaid=$_POST['areaid'];} else {$areaid="0";}
?>


<p>
<label for="areaid"><?php echo $mchoiceout['mch2']; ?></label>
<select name="areaid" id="areaid" style="width:70px">
	<option value="0"> - </option>

	<?php
	$retour1 = mysql_query('SELECT * FROM area WHERE active=1 ORDER BY areaorder;');
	while ($donnees1 = mysql_fetch_array($retour1))
		{
		echo '<option value="' . $donnees1['areaid'] . '" ';
		if ($areaid == $donnees1['areaid'])
			{
			echo 'selected="selected"';
			}
		echo '>' . $donnees1['areaname'] . '</option><br/>';
		}
	?>
</select>
</p>

<br/>
<?php
//CHOIX DES CHAMBRES//
if (isset($_POST['room'])) {$room=$_POST['room'];} else {$room="0";}
?>


<p>
<label for="room"><?php echo $mchoiceout['mch3']; ?></label>
<select name="room" id="room" style="width:43px">
	<option value="0"> - </option>

	<?php
	$retour1 = mysql_query('SELECT * FROM detail_villa WHERE room>0 GROUP BY room;');
	while ($donnees1 = mysql_fetch_array($retour1))
		{
		echo '<option value="' . $donnees1['room'] . '" ';
		if ($room == $donnees1['room'])
			{
			echo 'selected="selected"';
			}
		echo '>' . $donnees1['room'] . '</option><br/>';
		}
	?>
</select>
</p>


<?php
//CHOIX DES BATHROOMS//
if (isset($_POST['bath'])) {$bath=$_POST['bath'];} else {$bath="0";}
?>

<p>
<label for="bath"><?php echo $mchoiceout['mch4']; ?></label>
<select name="bath" id="bath" style="width:43px">
	<option value="0"> - </option>

	<?php
	$retour1 = mysql_query('SELECT * FROM detail_villa WHERE bath>0 GROUP BY bath;');
	while ($donnees1 = mysql_fetch_array($retour1))
		{
		echo '<option value="' . $donnees1['bath'] . '" ';
		if ($bath == $donnees1['bath'])
			{
			echo 'selected="selected"';
			}
		echo '>' . $donnees1['bath'] . '</option><br/>';
		}
	?>
</select>
</p>

<br/>

<?php
//CHOIX POOL//
if (isset($_POST['pool'])) {$pool=$_POST['pool'];} else {$pool="0";}
?>

<p>
<label for="pool"><?php echo $mchoiceout['mch5']; ?></label>
<select name="pool" id="pool" style="width:43px">
	<option value="0" <?php	if ($pool == "0") {echo ' selected="selected"';}?>> - </option>
	<option value="on" <?php	if ($pool == "on") {echo ' selected="selected"';}?>><?php echo $mchoiceout['mch10']; ?></option>
	<option value="" <?php	if ($pool == "") {echo ' selected="selected"';}?>><?php echo $mchoiceout['mch11']; ?></option>
</select>
</p>

<?php
//CHOIX JACUZ
if (isset($_POST['jacuz'])) {$jacuz=$_POST['jacuz'];} else {$jacuz="0";}
?>

<p>
<label for="jacuz"><?php echo $mchoiceout['mch6']; ?></label>
<select name="jacuz" id="jacuz" style="width:43px">
	<option value="0" <?php	if ($jacuz == "0") {echo ' selected="selected"';}?>> - </option>
	<option value="on" <?php	if ($jacuz == "on") {echo ' selected="selected"';}?>><?php echo $mchoiceout['mch10']; ?></option>
	<option value="" <?php	if ($jacuz == "") {echo ' selected="selected"';}?>><?php echo $mchoiceout['mch11']; ?></option>
</select>
</p>

<?php
//CHOIX SEAV
if (isset($_POST['seav'])) {$seav=$_POST['seav'];} else {$seav="0";}
?>

<p>
<label for="seav"><?php echo $mchoiceout['mch7']; ?></label>
<select name="seav" id="seav" style="width:43px">
	<option value="0" <?php	if ($seav == "0") {echo ' selected="selected"';}?>> - </option>
	<option value="on" <?php	if ($seav == "on") {echo ' selected="selected"';}?>><?php echo $mchoiceout['mch10']; ?></option>
	<option value="" <?php	if ($seav == "") {echo ' selected="selected"';}?>><?php echo $mchoiceout['mch11']; ?></option>
</select>
</p>

<?php
//CHOIX Beach
if (isset($_POST['beach'])) {$beach=$_POST['beach'];} else {$beach="0";}
?>

<p>
<label for="beach"><?php echo $mchoiceout['mch8']; ?></label>
<select name="beach" id="beach" style="width:43px">
	<option value="0" <?php	if ($beach == "0") {echo ' selected="selected"';}?>> - </option>
	<option value="on" <?php	if ($beach == "on") {echo ' selected="selected"';}?>><?php echo $mchoiceout['mch10']; ?></option>
	<option value="" <?php	if ($beach == "") {echo ' selected="selected"';}?>><?php echo $mchoiceout['mch11']; ?></option>
</select>
</p>

<?php
//CHOIX Internet
if (isset($_POST['internet'])) {$internet=$_POST['internet'];} else {$internet="0";}
?>

<p>
<label for="internet"><?php echo $mchoiceout['mch9']; ?></label>
<select name="internet" id="internet" style="width:43px">
	<option value="0" <?php	if ($internet == "0") {echo ' selected="selected"';}?>> - </option>
	<option value="on" <?php	if ($internet == "on") {echo ' selected="selected"';}?>><?php echo $mchoiceout['mch10']; ?></option>
	<option value="" <?php	if ($internet == "") {echo ' selected="selected"';}?>><?php echo $mchoiceout['mch11']; ?></option>
</select>
</p>

<br/

<?php
//CHOIX DES PERIODES//
if (isset($_POST['perid'])) {$perid=$_POST['perid'];} else {$perid="0";}
?>

<p>
<label for="perid"><?php echo $mchoiceout['mch13']; ?></label>
<select name="perid" id="perid" style="width:70px">
	<option value="0"> - </option>

	<?php
	$retour1 = mysql_query('SELECT * FROM periode WHERE percat=\'' . $_SESSION['cat'] . '\' AND peridlang=\'' . $_SESSION['idlang'] . '\' AND perorder=1 ORDER BY per_beg;');
	while ($donnees1 = mysql_fetch_array($retour1))
		{
		echo '<option value="' . $donnees1['perid'] . '" ';
		if ($perid == $donnees1['perid'])
			{
			echo 'selected="selected"';
			}
		echo '>' . $donnees1['pername'] . ' - ' . $donnees1['per_beg'] . '->' . $donnees1['per_end'] . '</option><br/>';
		}
	?>
</select>
</p>


<?php
//CHOIX PRX MIN
if (isset($_POST['prxmin'])) {$prxmin=$_POST['prxmin'];} else {$prxmin="0";}
?>

<p>
<label for="prxmin"><?php echo $mchoiceout['mch14']; ?></label>
<select name="prxmin" id="prxmin" style="width:43px">
	<option value="0" <?php	if ($prxmin == "0") {echo ' selected="selected"';}?>> - </option>
	<option value="2000" <?php	if ($prxmin == "2000") {echo ' selected="selected"';}?>>2,000$</option>
	<option value="4000" <?php	if ($prxmin == "4000") {echo ' selected="selected"';}?>>4,000$</option>
	<option value="6000" <?php	if ($prxmin == "6000") {echo ' selected="selected"';}?>>6,000$</option>
	<option value="8000" <?php	if ($prxmin == "8000") {echo ' selected="selected"';}?>>8,000$</option>
	<option value="10000" <?php	if ($prxmin == "10000") {echo ' selected="selected"';}?>>10,000$</option>
	<option value="15000" <?php	if ($prxmin == "15000") {echo ' selected="selected"';}?>>15,000$</option>
	<option value="20000" <?php	if ($prxmin == "20000") {echo ' selected="selected"';}?>>20,000$</option>
	<option value="30000" <?php	if ($prxmin == "30000") {echo ' selected="selected"';}?>>30,000$</option>
</select>
</p>


<?php
//CHOIX PRX Max
if (isset($_POST['prxmax'])) {$prxmax=$_POST['prxmax'];} else {$prxmax="0";}
?>

<p>
<label for="prxmax"><?php echo $mchoiceout['mch15']; ?></label>
<select name="prxmax" id="prxmax" style="width:43px">
	<option value="0" <?php	if ($prxmax == "0") {echo ' selected="selected"';}?>> - </option>
	<option value="4000" <?php	if ($prxmax == "4000") {echo ' selected="selected"';}?>>4,000$</option>
	<option value="6000" <?php	if ($prxmax == "6000") {echo ' selected="selected"';}?>>6,000$</option>
	<option value="8000" <?php	if ($prxmax == "8000") {echo ' selected="selected"';}?>>8,000$</option>
	<option value="10000" <?php	if ($prxmax == "10000") {echo ' selected="selected"';}?>>10,000$</option>
	<option value="15000" <?php	if ($prxmax == "15000") {echo ' selected="selected"';}?>>15,000$</option>
	<option value="20000" <?php	if ($prxmax == "20000") {echo ' selected="selected"';}?>>20,000$</option>
	<option value="30000" <?php	if ($prxmax == "30000") {echo ' selected="selected"';}?>>30,000$</option>
</select>
</p>

<input class="bouton" type="submit" value="<?php echo $mchoiceout['mch12']; ?>" style="width:100px"/>
</form>
<form action="index.php?cat=villa" method="post">
<input class="bouton" type="submit" value="Reset" style="width:55px"/>
</form>


<?php

}
?>

Et le code de main.php:

<?php

/////////Villa///////////
if ($_SESSION['cat'] == 'villa')

{


//Colonne=Valeur
function critadd1($requete, $colonne, $valeur)
	{
	if (isset($valeur) AND $valeur != "0")
		{
		$requete = $requete . " AND " . $colonne . " = '" . $valeur ."'";
		}
	return $requete;
	}

//Colonne>=Valeur
function critadd2($requete, $colonne, $valeur)
	{
	if (isset($valeur) AND $valeur != 0)
		{
		$requete = $requete . " AND " . $colonne . " >= '" . $valeur ."'";
		}
	return $requete;
	}

$requete = "SELECT * FROM bien LEFT JOIN detail_villa ON bien.id=detail_villa.idbien WHERE cat='" . $_SESSION['cat'] . "' AND active='1'";
$requete = critadd1($requete,"idbien",$idbien);
$requete = critadd1($requete,"area",$areaid);
$requete = critadd2($requete,"room",$room);
$requete = critadd2($requete,"bath",$bath);
$requete = critadd1($requete,"pool",$pool);
$requete = critadd1($requete,"jacuz",$jacuz);
$requete = critadd1($requete,"seav",$seav);
$requete = critadd1($requete,"beach",$beach);
$requete = critadd1($requete,"internet",$internet);


$requete=mysql_query($requete . " ORDER BY name;");
//AFFICHAGE VILLAS
while ($requete2 = mysql_fetch_array($requete))
	{
	echo $requete2['name'] . '-' . $requete2['idbien'] . '- ';



	If (isset($room) AND $room != "0")
		{ //Si room est DEFINI
		//AFFICHAGE PRX
		if (isset($perid) AND $perid != "0")
			{//Prix de PRX pour 1 saison Déterminé
			$requeteidrelated = mysql_query('SELECT * FROM periode WHERE perid=\'' . $perid . '\';');
			$requeteidrelated = mysql_fetch_array($requeteidrelated);
			$peridrelated = $requeteidrelated['idrelated'];
			$requeteprx = mysql_query('SELECT prx' . $room . ' AS prxx FROM price WHERE idbien=\'' . $requete2['idbien'] . '\' AND idper=\'' . $peridrelated . '\';');
			while ($requeteprx2 = mysql_fetch_array($requeteprx))
				{
				$requeteprxfin = $requeteprx2['prxx'];
				}
			}
		elseif ($perid == "0")
			{//Prix MOYEN de PRX pour toutes les saisons car pas de saison déterminées
			$requeteprx = mysql_query('SELECT ROUND(AVG(prx' . $room . ')) AS prxx FROM price WHERE idbien=\'' . $requete2['idbien'] . '\';');
			while ($requeteprx2 = mysql_fetch_array($requeteprx))
				{
				$requeteprxfin = $requeteprx2['prxx'];
				}
			}
		}

	else if ($room == "0")
		{ //Si room est NON-DEFINI
		//AFFICHAGE PRX
		if (isset($perid) AND $perid != "0")
			{//Prix de PRX pour 1 saison Déterminé
			$requeteidrelated = mysql_query('SELECT * FROM periode WHERE perid=\'' . $perid . '\';');
			$requeteidrelated = mysql_fetch_array($requeteidrelated);
			$peridrelated = $requeteidrelated['idrelated'];
			$requeteprx = mysql_query('SELECT * FROM price WHERE idbien=\'' . $requete2['idbien'] . '\' AND idper=\'' . $peridrelated . '\';');
			while ($requeteprx2 = mysql_fetch_array($requeteprx))
				{
				$requeteprxfin = $requeteprx2['prx'];
				}
			}
		elseif ($perid == "0")
			{//Prix MOYEN de PRX pour toutes les saisons car pas de saison déterminées
			$requeteprx = mysql_query('SELECT ROUND(AVG(prx)) FROM price WHERE idbien=\'' . $requete2['idbien'] . '\';');
			while ($requeteprx2 = mysql_fetch_array($requeteprx))
				{
				$requeteprxfin = $requeteprx2['ROUND(AVG(prx))'];
				}
			}
		}
	echo $requeteprxfin;

	echo '<br/>';
	}

}
?>

Merci beaucoup!

Hors ligne

#4 Le 03/08/2007, à 18:32

Feral

Re : [Résolu] PHP: Tri d'une table par liste externe...

Ne pourrais-je pas créer une table view/VUE avec ma requete puis créer une nouvelle colonne "ORDER" dans la table view puis refaire une query qui trierait sur base de la nouvelle colonne "ORDER"???

Des idées de comment faire cela??

Merci.

Hors ligne

#5 Le 03/08/2007, à 23:35

Feral

Re : [Résolu] PHP: Tri d'une table par liste externe...

Bon, voilà, j'ai trouvé...
Ca m'a couté une journée pour 2 lignes mais je commence à avoir l'habitude... :-(

Donc voilà, il fallait juste créer un array pour mettre l'ID et la valeur (issue des calcules et conditions), ensuite ben avec asort tout rentre dans l'ordre et je peux exploiter mon array facilement avec un "foreach".

			while ($requeteprx2 = mysql_fetch_array($requeteprx))
				{
				$requeteprxfin = $requeteprx2['ROUND(AVG(prx))'];
				}
			}
		}
	// Chargement de l'array de tri!!
	$sorting+=array($requete2['idbien'] => $requeteprxfin);

	}

asort($sorting); //Tri sur l'array
//print_r($sorting); //Vérification du tri
//echo '<br />';
...

Bonne soirée!

Dernière modification par Feral (Le 03/08/2007, à 23:36)

Hors ligne