Door
J C
op 01-05-2014 16:56
gewijzigd op 01-05-2014 17:05
1.843 views
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.
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))
{}
}
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&do=boeking-detail&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
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
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.
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);
}
}