Page 1 sur 1

erreur group by

Posté : 07 sept. 2010, 22:36
par gauthier 62
Bonsoir,

j'ai cette erreur et je ne vois pas d'ou elle vient

Merci de m'aider

Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause

code
<?php
	// initilisation de la session
	session_start();

	if( !isset($_SESSION['last_cookie_connexion']) && isset($_COOKIE['last_connexion']) )
	{
	// on stock le cookie dans la session pour ne pas écraser le cookie avant de l'avoir utilisé.
	$_SESSION['last_cookie_connexion'] = $_COOKIE['last_connexion'];
	}

	// on met à jour le cookie :
	setcookie("last_connexion", time(), time()+3600); // on stock le timestamp actuel 

	//CONNEXION a la BDD
	include('config.php');
	$resource = mysql_connect($hote, $utilisateur, $password) or die(mysql_error());
	mysql_select_db($base, $resource) or die(mysql_error());

	// Types de contrat
	$typesDeContrat = array();
	$result = mysql_query('SELECT CodetypeC, Libelle FROM typecontrat',$resource) or die(mysql_error());
	while($row = mysql_fetch_assoc($result)){ $typesDeContrat[] = $row; }
	mysql_free_result($result);

	// Communes
	$communes = array();
	$result = mysql_query('SELECT id, nom_ville FROM villes WHERE liste_deroulante = 1 ORDER BY nom_ville ASC',$resource) or die(mysql_error());
	while($row = mysql_fetch_assoc($result)){ $communes[] = $row; }
	mysql_free_result($result);

	// Types de bien
	$typesDeBien = array();
	$result = mysql_query('SELECT CodeTypeB, Libelle FROM typebien',$resource) or die(mysql_error());
	while($row = mysql_fetch_assoc($result)){ $typesDeBien[] = $row; }
	mysql_free_result($result);

	// Début de la requête
	$request = 'biens.photo, villes.nom_ville, typebien.libelle AS LibelleTypeBien, typecontrat.libelle AS LibelleTypeContrat, biens.prix, biens.nbre_piece, biens.surface, biens.date_annonce, localisation.Code, localisation.Libelle AS LibelleLocalisation, biens.description
				FROM biens
				INNER JOIN villes      ON biens.lieu      = villes.id
				LEFT  JOIN typebien    ON biens.codetypeB = typebien.codetypeB
				LEFT  JOIN typecontrat ON biens.codetypeC = typecontrat.codetypeC
				LEFT JOIN localisation ON biens.localisation = localisation.Code 
				WHERE 1';

	// Action sur recherche
	if(isset($_GET['localisation']))
	{
	$request .= " AND localisation.Libelle = '".mysql_real_escape_string($_GET['localisation'])."' "; // on ajoute le filtre 
	$_SESSION['request'] = $request; // on met à jour la session.
	}

	else if(isset($_POST['rechercher'])) // on execute pas recherche par POST si on a une variable GET directe
	{
	if(!isset($_POST['typecontrat']))
	{
	$messageErreur1 = TRUE;
	}
	else
	{
	// Filtre sur le(s) type(s) de contrat choisi(s)
	$tab = array();
	if(in_array(1,$_POST['typecontrat'])){ $tab[]=1; }
	if(in_array(2,$_POST['typecontrat'])){ $tab[]=2; }
	if(in_array(3,$_POST['typecontrat'])){ $tab[]=3; }
	if(count($tab)>0){ $request.=' AND biens.codetypeC IN ( '.implode(', ',$tab).' )'; }

	// Filtre sur la ville choisie
	$villes = array($_POST['lieux']);

	// Ajouter d'autres villes suivant le choix de distance par rapport à la ville choisie
	if($_POST['choix']>0)
	{
	// Coordonnées géographiques de la ville choisie
	$result = mysql_query('SELECT latitude, longitude FROM villes WHERE id = "'.mysql_real_escape_string($_POST['lieux'],$resource).'"',$resource) or die(mysql_error());
	$row = mysql_fetch_assoc($result);
	mysql_free_result($result);

	// Autres villes, à moins du nombre de kilomètres demandés
	$result = mysql_query('SELECT id, nom_ville, SQRT( POW( ( 69.1 * ( latitude - "'.mysql_real_escape_string($row['latitude'],$resource).'" ) ), 2 ) + POW( ( 53 * ( longitude - "'.mysql_real_escape_string($row['longitude'],$resource).'" ) ), 2 ) ) * 1.609 AS distance
						FROM villes
						WHERE id != "'.mysql_real_escape_string($_POST['lieux'],$resource).'"
						HAVING distance < "'.mysql_real_escape_string($_POST['choix'],$resource).'"
						ORDER BY distance ASC',$resource) or die(mysql_error());

	while($row = mysql_fetch_assoc($result)){ $villes[] = $row['id']; }
	mysql_free_result($result);
	}

	// Ajouter les villes
	$request .= ' AND biens.Lieu IN ( '.implode(', ',$villes).' )';

	// Filtre sur le type de bien
	if(in_array($_POST['typebien'], array(1,2,3,4,5,6,7,8,9,10)))
	$request.=' AND biens.codetypeB = "'.mysql_real_escape_string($_POST['typebien'],$resource).'"';

	// Filtre sur la surface minimale
	if(strlen($_POST['surfaceMin'])>0)
	$request.=' AND biens.surface >= "'.mysql_real_escape_string($_POST['surfaceMin'],$resource).'"';

	// Filtre sur la surface maximale
	if(strlen($_POST['surfaceMax'])>0)
	$request.=' AND biens.surface <= "'.mysql_real_escape_string($_POST['surfaceMax'],$resource).'"';

	// Filtre sur le budget minimal
	if(strlen($_POST['budgetmini'])>0)
	$request.=' AND biens.prix >= "'.mysql_real_escape_string($_POST['budgetmini'],$resource).'"';

	// Filtre sur le budget maximal
	if(strlen($_POST['budgetmaxi'])>0)
	$request.=' AND biens.prix <= "'.mysql_real_escape_string($_POST['budgetmaxi'],$resource).'"';

	// Filtre sur les annonces avec photo
	if(isset($_POST['avecPhoto']) && $_POST['avecPhoto']==1)
	$request.=' AND LENGTH( TRIM( biens.photo ) ) > 0';

	// Filtre sur les annonces de moins de 30 jours
	if(isset($_POST['moins30Jours']) && $_POST['moins30Jours']==1)
	$request.=' AND biens.date_annonce >= NOW( ) - INTERVAL 30 DAY';

	// Filtre sur les nouvelles annonces depuis la dernière connexion
	if(isset($_POST['derniereConnexion']) && $_POST['derniereConnexion']==1 && isset($_SESSION['last_cookie_connexion']))
	{
	$request .= " AND date_annonce >= '".$_SESSION['last_cookie_connexion']."'"; 
	}

	$_SESSION['request'] = $request; // on met à jour la requete dans la session.
	}
	}

	if( isset($_GET['pageNumero']) )
	{
	$noPage = $_GET['pageNumero'];
	}
	else
	{
	$noPage = 0;
	}

	if( isset($_SESSION['request']) )
	{
	$request = $_SESSION['request'];

	// Exécuter la requête pour trouver les correspondances

	// Nombre de résultats

	$result = mysql_query('SELECT COUNT( biens.id ) AS total, '.$request, $resource) or die(mysql_error());
	$row = mysql_fetch_row($result);
	mysql_free_result($result);

	$resultats_par_page = 4;
	$nombreResultats = $row[0];
	$nombrePages = ceil($nombreResultats/$resultats_par_page);

	$resultatsRecherche = array();
	$result = mysql_query('SELECT '.$request.' LIMIT '.($noPage*$resultats_par_page).', '.$resultats_par_page, $resource) or die(mysql_error());

	while($row = mysql_fetch_assoc($result))
	{
	$resultatsRecherche[] = $row;
	}

	mysql_free_result($result);
	}


	// Nombre d'annonces au total dans chaque "localisation"
	$repartitionsAnnoncesLocalisation = array();
	$result = mysql_query('SELECT localisation.Libelle, COUNT( biens.id ) AS total
			FROM localisation
			LEFT JOIN biens ON localisation.Code = biens.localisation
			GROUP BY localisation.Code
			ORDER BY localisation.Code ASC',$resource) or die(mysql_error());

	while($row=mysql_fetch_assoc($result)){	$repartitionsAnnoncesLocalisation[] = $row; }
	mysql_free_result($result);
	
	// Déconnexion de la base de données
	mysql_close($resource);
?>
	


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"  "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Notaire &agrave; Neuville Saint Vaast (62). SCP Pecqueur & Houzet : n&eacute;gociation immobili&egrave;re</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="ap.css" title="Design" media="screen">
<link rel="stylesheet" type="text/css" href="shadowbox.css">
		<script type="text/javascript" src="shadowbox.js"></script>
		<script type="text/javascript">
		Shadowbox.init({
			handleOversize: "drag",
			modal: true
		});
		</script>
</head>

<body>
<div id="baniere1">
<!--================== Menu ==================-->
<div class="menu">
<ul id="navlist">
<li id="active"><a href="index.php" id="current">Accueil</a></li>
<li><a href="nos_etudes.php">Notre étude</a></li>
<li><a href="Nos_annonces.php">Nos Annonces</a></li>
<li><a href="actu_juri.php">Actualités juridique</a></li>
<li><a href="info.php">info</a></li>
</ul>
</div>
</div>

<div id="design"></div>

<?php
include('panel_gauche.php');
include('panel_droit.php');
?>

<div id="milieu2" style="width:600px; font-size:12px;">
				<?php
				if( isset($resultatsRecherche) )
				{
					echo '<div style="margin-bottom:1em; font-size:1.1em; font-weight:bold; text-decoration:underline;">R&eacute;sultats de votre recheche :</div>';
					
					if(count($resultatsRecherche) > 0)
					{
						foreach($resultatsRecherche as $val)
						{
						?>
							<div style="margin-bottom:1em;">
								<div style="float:right; margin-left:5px;">Annonce du <?php echo htmlentities(date('d/m/Y',strtotime($val['date_annonce']))); ?></div>
								<?php if(strlen($val['photo']) > 0)
								{
									echo '<a href="upload/'.htmlentities($val['photo']).'" rel="shadowbox" with="100" height="100"><img src="./upload/'.htmlentities($val['photo']).'" style="border:0px;float:left; max-height:100px; max-width:100px; margin-right:5px;"></img></a>';
								}
								?>
								<table>
								<tr>
								<td style="color:#0179C8;font-size:12px">Ville :</td>
								<td style="color:#3B4054;font-size:12px"><?php echo htmlentities($val['nom_ville']); ?></td>
								</tr>
								<tr>
								<td style="color:#0179C8;font-size:12px">Description</td>
								<td style="color:#3B4054;font-size:12px"><?php echo htmlentities($val['description']); ?> </td>
								</tr>
								<tr>
								<td style="color:#0179C8;font-size:12px">Type de contrat :</td>
								<td style="color:#3B4054;font-size:12px"><?php echo htmlentities($val['LibelleTypeContrat']); ?></td>
								</tr>
								<tr>
								<td style="color:#0179C8;font-size:12px">Type de bien :</td>
								<td style="color:#3B4054;font-size:12px"><?php echo htmlentities($val['LibelleTypeBien']); ?></td>
								</tr>
								<tr>
								<td style="color:#0179C8;font-size:12px">Prix :</td>
								<td style="color:#3B4054;font-size:12px"><?php echo htmlentities($val['prix']); ?> &euro;</td>
								</tr>
								<tr>
								<td style="color:#0179C8;font-size:12px">Nombre de pi&egrave;ces :</td>
								<td style="color:#3B4054;font-size:12px"><?php echo htmlentities($val['nbre_piece']); ?></td>
								</tr>
								<tr>
								<td style="color:#0179C8;font-size:12px">Surface :</td>
								<td style="color:#3B4054;font-size:12px"><?php echo htmlentities($val['surface']); ?> m<sup>2</sup></td>
								</tr>
							
								</table>
						</div>
			
						<?php
						}
						
						if($nombrePages>1)
						{
							for($i=0; $i<$nombrePages; $i++)
							{
								echo '<a style="color:black; text-decoration:none;text-align:center" href="code_recherche.php?pageNumero='.$i.'">&nbsp;&nbsp;-&nbsp;&nbsp;'.($i+1).'</a>';
							}
						}
					}
					else
					{
						echo "<div>Nous sommes d&eacute;sol&eacute;s mais aucune annonce ne semble correspondre &agrave; vos attentes.</div>";
					}
				}
				else
				{
					echo "<div>Des champs de recherche sont manquant, veuillez re-remplire le formulaire de recherche.</div>";
				}
						
				?>
</div>	
<?php include ('pied_de_page.php'); ?>

</body>
</html>

Re: erreur group by

Posté : 07 sept. 2010, 23:23
par stealth35
je te conseil de plutot mettre tes requetes dans un variable avant
$sql = 'SELECT ..........';
$result = mysql_query($sql) or exit('<pre>' . $sql . PHP_EOL . mysql_error() . '</pre>');

Re: erreur group by

Posté : 07 sept. 2010, 23:45
par Ryle
Effectivement, si tu affichais (et nous donnais) la requête qui pose problème, ce serait beaucoup plus facile de voir ce qui ne va pas que de devoir éplucher le code php qui est autour :)

A première vue, je dirais que tu as un "HAVING distance < .. " qui traine dans une requête, alors qu'il n'y a pas de clause group by, ni d'élément groupé dans ta requête... mais comme je ne sais pas si c'est de cette requête là que vient le problème, on va attendre d'avoir plus d'infos...

Re: erreur group by

Posté : 08 sept. 2010, 07:35
par gauthier 62
J'ai beau faire sa mais il me met toujours cette erreur, a moins que je la tape mal

montrai moi comment vous l'auriez inséré la requête dans:
$sql = 'SELECT ..........';
$result = mysql_query($sql) or exit('<pre>' . $sql . PHP_EOL . mysql_error() . '</pre>');
moi j'ai fais sa :
$sql ='biens.photo, villes.nom_ville, typebien.libelle AS LibelleTypeBien, typecontrat.libelle AS LibelleTypeContrat, biens.prix, biens.nbre_piece, biens.surface, biens.date_annonce, localisation.Code, localisation.Libelle AS LibelleLocalisation, biens.description
				FROM biens
				INNER JOIN villes      ON biens.lieu      = villes.id
				LEFT  JOIN typebien    ON biens.codetypeB = typebien.codetypeB
				LEFT  JOIN typecontrat ON biens.codetypeC = typecontrat.codetypeC
				LEFT JOIN localisation ON biens.localisation = localisation.Code 
				WHERE 1';
$result = mysql_query($sql) or exit('<pre>' . $sql . PHP_EOL . mysql_error() . '</pre>');

Re: erreur group by

Posté : 08 sept. 2010, 08:06
par stealth35
c'est bien comme ca, mais faut le faire a chaque requête, il va te marquer la quelle n'est pas bonne

Re: erreur group by

Posté : 08 sept. 2010, 08:45
par zaltec
Quel code ...!!!!
C'est pour calculer des itinéraires ??
BOn récapitulons : 1 - il faut isoler la requete qui pose pb (commentaire + modif sql pour syntaxe correcte)
2 - la faire tourner directement sous ton sgbd
3 - le msg sql est explicite : en fait tu utilises plusieurs fonctions d'agregat min,max,... dans la meme requete sans indiquer de clause group by explicite.

Re: erreur group by

Posté : 08 sept. 2010, 17:10
par gauthier 62
C'est bon j'ai trouvé l'erreur il me manquait un select et j'avais un count ' (pour la pagination) qui me servait a rien pour compter les ligne

Merci de m'avoir aidé :D :D