Ik wil een query 3 laten herhalen.

Nu dacht ik dat dit wel met een array zou moeten kunnen.
Maar hij voert hem nu maar 1 keer uit, namelijk de laatste. Wat doe ik fout


$aVersies = array('1', '2', '3'); 
	foreach($aVersies as $sVersies)  
	{
	//Daar gaan we dan
	$qry 	="
					(SELECT
						bk_boekingen_kenmerk,
						bk_boekingen_naam,
						bk_boekingen_soort,
						bk_boekingen_datum,
						bk_locatie_naam						
					FROM
						bk_boekingen_versie".$sVersies." bk";
}
$sql = mysql_query($qry);
	if($sql === false)
	{
	echo (" Er gaat iets mis in (".$qry .")".mysql_error());
	}
echo $sVersies.$qry;


Om het een beetje overzichtelijk te houden is dit maar maar een klein deel van de code.
Zo te zien sluit het haakje op regel 14 het haakje van regel 3. Oftewel $qry wordt eerst een paar keer overschreven in de foreach loop en dan..... wordt de laatste uitgevoerd erbuiten. Ik denk dat je gewoon die query call binnen de foreach loop moet zetten.
Er komt alleen nog die union in.

Ik heb wel de uitkomst van de query


SELECT bk_boekingen_kenmerk, bk_boekingen_naam, bk_boekingen_soort, bk_boekingen_datum, bk_locatie_naam 
FROM bk_boekingen_versie1 bk 
LEFT JOIN bk_locatie loc ON bk.bk_boekingen_locatie_id=loc.bk_locatie_id 
WHERE bk.bk_boekingen_datum<'1398895200' )
 UNION
 (SELECT bk_boekingen_kenmerk, bk_boekingen_naam, bk_boekingen_soort, bk_boekingen_datum, bk_locatie_naam
 FROM bk_boekingen_versie2 bk 
 LEFT JOIN bk_locatie loc ON bk.bk_boekingen_locatie_id=loc.bk_locatie_id 
 WHERE bk.bk_boekingen_datum<'1398895200' ) 
 UNION 
 (SELECT bk_boekingen_kenmerk, bk_boekingen_naam, bk_boekingen_soort, bk_boekingen_datum, bk_locatie_naam 
 FROM bk_boekingen_versie3 bk 
 LEFT JOIN bk_locatie loc ON bk.bk_boekingen_locatie_id=loc.bk_locatie_id 
 WHERE bk.bk_boekingen_datum<'1398895200' ) 
 ORDER BY bk_boekingen_datum DESC
Wat is eigenlijk het verschil tussen die 3 tabellen (buiten de naam)?
Versie 1 is van 12 jaar geleden en is heel anders opgebouwd, net als versie 2. Versie 3 is de huidige versie.

Ik ben inmiddels wel achter het probleem.

$qry overschrijft zichzelf steeds.

Ik heb nu de $qry =''; buiten de foreach gezet en nu werkt het wel.


	$qry	='';
	$aVersies = array('1', '2', '3');
	$laatsteversie = '3';
	foreach($aVersies as $sVersies)  
	{
	//Daar gaan we dan
	$qry 	.="
					(SELECT
						bk_boekingen_kenmerk,
						bk_boekingen_naam,
						bk_boekingen_soort,
						bk_boekingen_datum,
						bk_locatie_naam						
					FROM
						bk_boekingen_versie".$sVersies." bk";
}


Voor de mensen die heel nieuwsgierig zijn geworden over het geheel.
Dit is de complete query.


	$qry	='';
	$aVersies = array('1', '2', '3');
	$laatsteversie = '3';
	foreach($aVersies as $sVersies)  
	{
	//Daar gaan we dan
	$qry 	.="
					(SELECT
						bk_boekingen_kenmerk,
						bk_boekingen_naam,
						bk_boekingen_soort,
						bk_boekingen_datum,
						bk_locatie_naam						
					FROM
						bk_boekingen_versie".$sVersies." bk";
							
		// kijken of het om een persoon in het algemeen gaat					
		if(isset($_GET['persnr']) || isset($_GET['invoerpersnr']))
		{
		$qry 	.="
					LEFT JOIN
						bk_locatie loc
					ON 	
						bk.bk_boekingen_kenmerk=pers.bk_personeel_boeking_id";
		}	
		$qry 	.="
								
					LEFT JOIN
						bk_locatie loc
					ON 	
						bk.bk_boekingen_locatie_id=loc.bk_locatie_id
					WHERE						
						";
		//datum bepalen						
		if($_GET['pagina'] == "boekingen")
		{
			if($overzicht['selectie'] == 1)
			{
			$qry 	.="
						bk.bk_boekingen_datum>=' ".$vandaag." '
					AND
						bk.bk_boekingen_status != 20";
			} 
			elseif($overzicht['selectie'] == 2)
			{
			$qry 	.="
						bk.bk_boekingen_datum<' ".$vandaag." '
					AND
						bk.bk_boekingen_datum>' ".$jaar."'
					AND
						bk.bk_boekingen_status != 20";
			}
			elseif($overzicht['selectie'] == 3)
			{
			$qry 	.="
						bk.bk_boekingen_datum>' ".$jaar."' 
					AND
						bk.bk_boekingen_status = 20";
			}
			elseif(isset($_GET['do']) && $_GET['do'] == "geschiedenis")
			{
			$qry	.="
						bk.bk_boekingen_datum<'".$vandaag."'";
			}					
		}
		// kijken of het om een invoerpersoon gaat
		if(isset($_GET['invoerpersnr']))
		{
		$qry	.="
					AND
						bk_boekingen_aannemer_id='".$_GET['invoerpersnr']."'";
		}
		// kijken of het om een persoon in het algemeen gaat
		if(isset($_GET['persnr']))
		{		
		$qry	.="			
					AND
						bk_personeel_mw_id='".$_GET['persnr']."'";
		}
		$qry	.="
					)";
		if($sVersies!=$laatsteversie)
		{
		$qry	.="
					UNION
					";
		}
	}	
	// kijken of het om een persoon in het algemeen gaat
	if(isset($_GET['persnr']))
	{		
	$qry	.="
				GROUP BY
					bk_boekingen_kenmerk";
	}
	$qry	.="
				ORDER BY
						bk_boekingen_datum";
	// Hoe gaan we sorteren?						
	if($_GET['pagina'] == "boekingen")
	{
		if($overzicht['selectie'] == 2)
		{
		$qry	.="
				DESC";
		}
		elseif(isset($_GET['do']) && $_GET['do'] == "geschiedenis")
		{
		$qry	.="
				DESC";
		}
		else
		{
		$qry	.="
				ASC";
		}
	}
	
	//dat is hem dan
	$sql = mysql_query($qry);
	if($sql === false)
	{
	echo (" Er gaat iets mis in (".$qry .")".mysql_error());
	}
echo $qry;
Ik roep het geloof ik wat vaak, maar due group-by op regel 92 is fout.
Als je door de left join mogelijk te veel records krijgt, dan moet he dat oplossen door bjj die join aan re geven welkrecord je wilt hebben.

Met foutmelding ondrrdrukking lijkt he foute query een juist antwoord te geven, maar is dat wel zo?

Http://wiki.pfz.nl/group-by
Het script is inmiddels een beetje aangepast.
Dus wellicht klopt het nu wel


	$qry	='';
	$aVersies = array('1', '2', '3');
	$laatsteversie = '3';
	foreach($aVersies as $sVersies)  
	{
	//Daar gaan we dan
	$qry 	.="
					(SELECT
						bk_boekingen_kenmerk,
						bk_boekingen_naam,
						bk_boekingen_soort,
						bk_boekingen_datum,
						bk_locatie_naam						
					FROM
						bk_boekingen_versie".$sVersies." bk";
							
		// kijken of het om een persoon in het algemeen gaat					
		if(isset($_GET['persnr']) || isset($_GET['invoerpersnr']))
		{
		$qry 	.="
					JOIN
						bk_personeel pers
					ON 	
						bk.bk_boekingen_kenmerk=pers.bk_personeel_boeking_id";
		}	
		$qry 	.="
								
					JOIN
						bk_locatie loc
					ON 	
						bk.bk_boekingen_locatie_id=loc.bk_locatie_id
					WHERE						
						";
		//datum bepalen						
		if($_GET['pagina'] == "boekingen")
		{
			if($overzicht['selectie'] == 1)
			{
			$qry 	.="
						bk.bk_boekingen_datum>=' ".$vandaag." '
					AND
						bk.bk_boekingen_status != 20";
			} 
			elseif($overzicht['selectie'] == 2)
			{
			$qry 	.="
						bk.bk_boekingen_datum<' ".$vandaag." '
					AND
						bk.bk_boekingen_datum>' ".$jaar."'
					AND
						bk.bk_boekingen_status != 20";
			}
			elseif($overzicht['selectie'] == 3)
			{
			$qry 	.="
						bk.bk_boekingen_datum>' ".$jaar."' 
					AND
						bk.bk_boekingen_status = 20";
			}
			elseif(isset($_GET['do']) && $_GET['do'] == "geschiedenis")
			{
			$qry	.="
						bk.bk_boekingen_datum<'".$vandaag."'";
			}					
		}
		// kijken of het om een invoerpersoon gaat
		if(isset($_GET['invoerpersnr']))
		{
		$qry	.="
					AND
						bk_boekingen_aannemer_id='".$_GET['invoerpersnr']."'";
		}
		// kijken of het om een persoon in het algemeen gaat
		if(isset($_GET['persnr']))
		{		
		$qry	.="			
					AND
						bk_personeel_mw_id='".$_GET['persnr']."'";
		}
		$qry	.="
					)";
		if($sVersies!=$laatsteversie)
		{
		$qry	.="
					UNION
					";
		}
	}	
	// kijken of het om een persoon in het algemeen gaat
	if(isset($_GET['persnr']))
	{		
	$qry	.="
				GROUP BY
					bk_boekingen_kenmerk";
	}
	$qry	.="
				ORDER BY
						bk_boekingen_datum";
	// Hoe gaan we sorteren?						
	if($_GET['pagina'] == "boekingen")
	{
		if($overzicht['selectie'] == 2)
		{
		$qry	.="
				DESC";
		}
		elseif(isset($_GET['do']) && $_GET['do'] == "geschiedenis")
		{
		$qry	.="
				DESC";
		}
		else
		{
		$qry	.="
				ASC";
		}
	}
	
	//dat is hem dan
	$sql = mysql_query($qry);
	if($sql === false)
	{
	echo (" Er gaat iets mis in (".$qry .")".mysql_error());
	}

Reageren