Ik wil graag de inhoud van 2 tabellen in 1 overzicht samenvoegen.

In het onderstaande voorbeeld hebik even hetzelfde tabel gebruikt met alleen een andere naam bij het tabel.


$qry = mysql_query("
					SELECT 
						bk_boekingen_kenmerk,
						bk_boekingen_datum,
						bk_boekingen_naam
					FROM
						bk_boekingen_versie3
                    WHERE
						bk_boekingen_datum >='".$vandaag."'
					AND
						bk_boekingen_status=10
                    ORDER BY
						bk_boekingen_datum ASC");
$qry = mysql_query("
					SELECT 
						bk_boekingen_kenmerk,
						bk_boekingen_datum,
						bk_boekingen_naam
					FROM
						bk_boekingen_versie2
                    WHERE
						bk_boekingen_datum >='".$vandaag."'
					AND
						bk_boekingen_status=10
                    ORDER BY
						bk_boekingen_datum ASC");



En dat wil ik dan weergeven in 1 overzicht, waarbij ik alle inhoud wil weergeven gesorteerd op bk_boekingen_datum.

Ik hoef (denk ik) niet een complete oplossing, maar meer een duwtje in de goede richting.

Wat is absoluut niet wil ik de inhoud koppelen aan elkaar.
Alleen een duwtje dan: UNION
Aha, zoiets dacht ik al, maar ik kwam niet verder dan join en een hoop andere benamingen voor samenvoegen...


$qry = "
                   (SELECT
                        bk_boekingen_kenmerk,
                        bk_boekingen_datum,
                        bk_boekingen_naam
                    FROM
                        bk_boekingen_versie3)
					UNION
                    (SELECT
                        bk_boekingen_kenmerk,
                        bk_boekingen_datum,
                        bk_boekingen_naam
                    FROM
                        bk_boekingen_versie2)
                    WHERE
                        bk_boekingen_datum >='".$vandaag."'
                    AND
                        bk_boekingen_status=10
                    ORDER BY
                        bk_boekingen_datum ASC)"; 
	$sql = mysql_query($qry);					
		if($sql === false)
		{
		echo (" Er gaat iets mis in (".$qry .")".mysql_error());
		}
		else
		{		
			while($list = mysql_fetch_array($qry))
			{}
}


Nu even testen of dit ook zou werken.
Als je dan nog alle resultaten wilt sorteren op datum, dan moet je een ORDER BY buiten de UNION plaatsen:

(SELECT ....
FROM ...
WHERE...)
UNION
(SELECT ....
FROM ...
WHERE ...)
ORDER BY bk_boekingen_datum

Overigens, als je geen haakjes gebruikt, dan zal je laatste ORDER BY automatisch al alle records gebruiken, alleen omdat je die ORDER BY nu binnen de haakjes plaatst niet.
Ik had mijn topic inmiddels aangepast, was een beetje raar zo. Maar wederom mijn dank voor het meedenken.

Ik doe toch iets fout, of mijn server ondersteunt Union niet.

Ik heb nu dit:


$qry = "
                  ((SELECT
                        bk_boekingen_kenmerk,
                        bk_boekingen_datum,
                        bk_boekingen_naam
                    FROM
                        bk_boekingen_versie3
					WHERE
                        bk_boekingen_datum >='".$vandaag."'
                    AND
                        bk_boekingen_status=10)
					UNION
                    (SELECT
                        bk_boekingen_kenmerk,
                        bk_boekingen_datum,
                        bk_boekingen_naam
                    FROM
                        bk_boekingen_versie2
                    WHERE
                        bk_boekingen_datum >='".$vandaag."'
                    AND
                        bk_boekingen_status=10)
                    ORDER BY
                        bk_boekingen_datum ASC)";  
	$sql = mysql_query($qry);					
		if($sql === false)
		{
		echo (" Er gaat iets mis in (".$qry .")".mysql_error());
		}
		else
		{		
			while($list = mysql_fetch_array($qry))
			{
			$main .= '
				<div class="homehalfcontainerrij" style="background:' . ($rijnummer++%2==0 ? "#FFF" : "#cccccc") . ';">
					<div class="driekwarthalfcontainer"><a href="?pagina=boekingen&amp;do=boeking-detail&amp;kenmerk='.$list['bk_boekingen_kenmerk'].'">'.CutString($list['bk_boekingen_naam'],130).'</a></div>
					<div class="kwarthalfcontainer">'.date("d-m-Y",$list['bk_boekingen_datum']).'</div>
				</div>
			';
			}
		}


En krijg deze melding:
Er gaat iets mis in ( ((SELECT bk_boekingen_kenmerk, bk_boekingen_datum, bk_boekingen_naam FROM bk_boekingen_versie3 WHERE bk_boekingen_datum >='1398895200' AND bk_boekingen_status=10) UNION (SELECT bk_boekingen_kenmerk, bk_boekingen_datum, bk_boekingen_naam FROM bk_boekingen_versie2) WHERE bk_boekingen_datum >='1398895200' AND bk_boekingen_status=10 ORDER BY bk_boekingen_datum ASC))You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNION (SELECT bk_boekingen_kenmerk, ' at line 11
Er staat een haakje teveel aan het begin van je query.
Die haakjes aan het begin en eind zijn in elk geval niet nodig. Misschien dat die ook de foutmelding opleveren.
Dacht ik eerst ook, maar dan krijg ik dit als melding:

Warning: mysql_fetch_array() expects parameter 1 to be resource, string given in /home/s010485/domains/jcsl.nl/public_html/medewerkers/paginas/home.php on line 42
Dan gaat het dus goed :-)

De fout zit erin dat je je query string voert aan de fetch functie en niet het resultaat van de query. Dus niet $qry gebruiken, maar $sql op regel 32 hierboven.
Ok ik voel me heel dom.

while($list = mysql_fetch_array($qry))

moet natuurlijk

while($list = mysql_fetch_array($sql))

zijn.

Toevoeging op 01/05/2014 17:56:35:

De echte uitdaging gaat nu pas echt beginnen.

Voor mij tot nu toe de grootste qry die ik heb gemaakt.

Met deze query kan ik al onze boekingen oproepen, verdeeld op komende boekingen, afgelopen boekingen en gecancelde boekingen.
Maar een medewerker kan het ook zo selecteren dat het alleen de boekingen worden weergeven die hij heeft ingevoerd of juist waarbij hij staat in ingedeeld.

En dan wordt de truc nog om dat uit 3 tabellen te halen. (In de afgelopen 12 jaar is de opbouw van de tabellen 3 keer drastisch veranderd en niemand heeft tijd en zin om alles opnieuw in te voeren)

Als voorproefje:


$qry 	="
					SELECT
						bk_boekingen_kenmerk,
						bk_boekingen_naam,
						bk_boekingen_soort,
						bk_boekingen_datum,
						bk_locatie_naam						
					FROM
					";
// kijken of het om een persoon in het algemeen gaat					
if(isset($_GET['persnr']))
{
$qry 	.="
						bk_personeel2,";
}
//						
$qry 	.="
						bk_boekingen bk
                    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_boekingen_kenmerk=bk_personeel_boeking_id
					AND
						bk_personeel_mw_id='".$_GET['persnr']."'
					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
				";
	}
}
if($sql === false)
{
echo (" Er gaat iets mis in (".$qry .")".mysql_error());
}
else
{		
	while($list = mysql_fetch_array($sql))
	{
	$sql = mysql_query($qry);
	}
}

Reageren