hallo,
Ik ben bezig met een pdo script. Ik wil gegevens uit vier verschillende tabellen selecteren en deze op een scherm tonen, maar sorteren bij dag. alle tabellen hebben de row dag. Ik wil alle informatie uit deze tabellen selecteren en per tabel een rij maken en deze sorteren op dag.
dus bijvoorbeeld:

Dag 1
Reis: Den Haag - Rotterdam
Overnachting: Bluesky - Rotterdam

Dag 2
Overnachting: Bluesky - Rotterdam
Activiteit: Bezoek Euromast - Rotterdam

Dit zijn mijn tabellen:

Dag:
- id
- dag

Reis
- id
- dag
- beginplaats
- eindbestemming

Overnachting
- id
- dag
- Hostel
- plaats

Activiteit
- id
- dag
- titel
- plaats
Waarom heb je in reis, overnachting en activiteit neit de id staan uit de dag tabel ipv de dag zelf ?
ZOals het nu staat zie ik ook de meerwaarde van de dagtabel niet in
Oké daar heb je een punt, maar als ik de dagtabel weglaat, hoe zou ik dan die andere drie tabellen kunnen combineren en het resultaat krijgen wat ik graag wil
In je query kun je een JOIN zetten, welke JOIN je nodig hebt ligt aan je gewenste eindresultaat.

http://www.sitepoint.com/understanding-sql-joins-mysql-database/

Een optie zou kunnen zijn:


SELECT
	dag.dag, 
	reis.beginplaats,
	reis.eindbestemmeing
FROM 
	`dag` 
	LEFT JOIN `reis` ON reis.dag = dag.id
ORDER BY
	dag.id ASC


Uiteraard ook afhankelijk van hoe je tabellen gekoppeld zijn. Vul je bijvoorbeeld in reis.dag het dag.id of dag.dag in.
Ik snap het niet helemaal, volgens mij met een join voeg je gegevens uit verschillende tabellen samen en maak je er een rij met gegevens van, dit wil ik niet ik wil de rijen uit verschillende tabellen onder elkaar zetten gesorteerd op dag waarbij soms een rij niet voorkomt:

Dag 1:
reis: Den Haag - Rotterdam
overnachting: bluesky hostel

Dag 2:
overnachting: bluesky hostel
activiteit: bezoek euromast

Dag 3:
reis: Rotterdam - utrecht
overnachting: Sky Hostel
joins zijn inderdaad het juiste stukje gereedschap. Het gaat er niet alleen om dat ze gegevens samenvoegen maar ook dat de juiste gegevens bij elkaar komen te staan. Hoe je ze uiteindelijk op het scherm weergeeft (naast elkaar of onder elkaar) maakt niets uit.

Wat ik me afvraag.. waarom staat bij dag twee de overnachting boven en niet onder?

In het kort zit het volgens mij zo:

je hebt reizen van een aantal dagen. in die dagen worden activiteiten georganiseerd.

Die overnachtingen is een beetje hoe je het wil. Je kunt die ook als activiteit zien.

van de dagen en van de activiteiten moet je zorgen dat je de volgorde kunt bepalen.
Je zou bijvoorbeeld voor de dagen gewoon een datum kunnen pakken of een nummer.
voor de activiteiten zou je een nummer of een tijdstip kunnen pakken

indeling:
REIZEN
-id, INT PRIMARY KEY, AUTO INCREMENT
-omschrijving, VARCHAR 255
-datum, DATE

DAGEN:
-id, INT PRIMARY KEY, AUTO INCREMENT
-reis_id, INT INDEX
-dag_nr INT

ACTIVITEITEN
-id, INT PRIMARY KEY, AUTO INCREMENT
-dag_id INT INDEX
-omschrijving, VARCHAR 255
-tijd TIME
Oke ik heb mijn join nu werkend, maar als ik twee activiteiten op een dag heb toont hij dag 1 twee keer

Dag: 1
Sluiswachterstraat 71 's-Gravenzande Genevè
Geneva Youth Hostel Rue Rothschild 30, 1202 Genève (GE)
Geneve trein
Dag: 1
Sluiswachterstraat 71 's-Gravenzande Genevè
Geneva Youth Hostel Rue Rothschild 30, 1202 Genève (GE)
Geneve bus

En hij toont alle dagen met alle drie de lijnen en ik wil graag als er bijvoorbeeld geen treinreis is dat hij die niet toont

Dit is mijn code:
$sql_activiteit= "SELECT
dagen.dag,
reisdagen.beginplaats,
reisdagen.eindbestemming,
overnachten.hostel,
overnachten.adres,
activiteit.plaats,
activiteit.titel
FROM
`dagen`
LEFT JOIN `reisdagen` ON reisdagen.dag = dagen.id
LEFT JOIN `overnachten` ON overnachten.dag = dagen.id
LEFT JOIN `activiteit` ON activiteit.dag = dagen.id

ORDER BY
dagen.id ASC";
$stmt_activiteit = $pdo->prepare($sql_activiteit);
$stmt_activiteit->bindParam(':dag', $dag, PDO::PARAM_STR);
$stmt_activiteit->execute();
$result_activiteit = $stmt_activiteit->fetchAll();
foreach($result_activiteit as $row_activiteit){
echo "<tr><td class='danger' COLSPAN='3'><label><h3>Dag: ".$row_activiteit['dag']."</h3></label></td></tr>

<tr><td><img src='images/50439.png'></td><td>".$row_activiteit['beginplaats']."</td><td>".$row_activiteit['eindbestemming']."</td></tr>
<tr><td><img src='images/slapen.png'></td><td>".$row_activiteit['hostel']."</td><td>".$row_activiteit['adres']."</td></tr>
<tr><td><img src='images/voeten.png'></td><td>".$row_activiteit['plaats']."</td><td>".$row_activiteit['titel']."</td></tr>
";


}
Daar is een klein foefje voor:

<?php
$vorige_dag = '';
foreach($result_activiteit as $row_activiteit)
{
if($vorige_dag != $row_activiteit['dag'])
{
$vorige_dag = $row_activiteit['dag'];
echo "<tr><td class='danger' COLSPAN='3'><label><h3>Dag: ".$row_activiteit['dag']."</h3></label></td></tr>";
}
echo "<tr><td><img src='images/50439.png'></td><td>".$row_activiteit['beginplaats']."</td><td>".$row_activiteit['eindbestemming']."</td></tr>
<tr><td><img src='images/slapen.png'></td><td>".$row_activiteit['hostel']."</td><td>".$row_activiteit['adres']."</td></tr>
<tr><td><img src='images/voeten.png'></td><td>".$row_activiteit['plaats']."</td><td>".$row_activiteit['titel']."</td></tr>";
}
?>
oke ik heb gedaan wat in de vorige reactie, maar hij toont nu dingen dubbel:

Dag: 1
Sluiswachterstraat 71 's-Gravenzande Genevè
Geneva Youth Hostel Rue Rothschild 30, 1202 Genève (GE)
Geneve trein
Sluiswachterstraat 71 's-Gravenzande Genevè
Geneva Youth Hostel Rue Rothschild 30, 1202 Genève (GE)
Geneve bus
<?php
$vorige_dag = '';
$sql_activiteit= "SELECT
dagen.dag,
reisdagen.reisdagen_dag,
reisdagen.reisdagen_status,
reisdagen.beginplaats,
reisdagen.eindbestemming,
overnachten.overnachten_dag,
overnachten.overnachten_status,
overnachten.hostel,
overnachten.adres,
activiteit.activiteit_dag,
activiteit.activiteit_status,
activiteit.plaats,
activiteit.titel
FROM
`dagen`
LEFT JOIN `reisdagen` ON reisdagen.reisdagen_dag = dagen.id
LEFT JOIN `overnachten` ON overnachten.overnachten_dag = dagen.id
LEFT JOIN `activiteit` ON activiteit.activiteit_dag = dagen.id

ORDER BY
dagen.id ASC";
$stmt_activiteit = $pdo->prepare($sql_activiteit);
$stmt_activiteit->bindParam(':dag', $dag, PDO::PARAM_STR);
$stmt_activiteit->execute();
$result_activiteit = $stmt_activiteit->fetchAll();


$vorige_dag = '';

foreach($result_activiteit as $row_activiteit)
{
$activiteit = $row_activiteit['dag'];

if($vorige_dag != $row_activiteit['dag'])
{
$vorige_dag = $row_activiteit['dag'];
echo "<tr><td class='danger' COLSPAN='3'><label><h3>Dag: ".$row_activiteit['dag']."</h3></label></td></tr>";
}

$reisdagen_dag = '';
if($row_activiteit['reisdagen_dag'] != $reisdagen_dag)
{
echo "<tr><td><img src='images/50439.png'></td><td>".$row_activiteit['beginplaats']."</td><td>".$row_activiteit['eindbestemming']."</td></tr>";
}

$overnachten_dag = '';
if($row_activiteit['overnachten_dag'] != $overnachten_dag)
{
echo "<tr><td><img src='images/slapen.png'></td><td>".$row_activiteit['hostel']."</td><td>".$row_activiteit['adres']."</td></tr>";
}

$activiteit_dag = '';
if($row_activiteit['activiteit_dag'] != $activiteit_dag)
{

echo "<tr><td><img src='images/voeten.png'></td><td>".$row_activiteit['plaats']."</td><td>".$row_activiteit['titel']."</td></tr>";
}



}



?>

Reageren