Data uit 2 verschillende tabellen
Ik had een klein (of groot) vraagje.
Ik heb 2 tabbellen maar ik krijg ze niet gekoppelt.
Dit is tabel 1
Hier aangegeven een tabel met bepaalde meldingen er in.
De Plaats colom heeft alleen een bepaald nummer.
In de andere tabel staan alle plaatsen van nederland
Momenteel krijg ik deze uitdraai van gegevens
Hier zie je de nummers op de plaats van de plaatsen.
Dit is het script van deze pagina
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
$datum = date("j/n/Y");
mysql_connect("127.0.0.1", "admin", "***");
mysql_select_db("Database");
$data = mysql_query("SELECT * FROM Meldingen Where Datum = '$datum' ORDER BY Tijd")
or die(mysql_error());
while($info = mysql_fetch_array( $data ))
{
Print "<tr>";
Print "<td>".$info['Datum'] . "</td> ";
Print "<td>".$info['Tijd'] . "</td> ";
Print "<td>".$info['Plaats'] . "</td> "; // Hier wil ik niet het nummer maar de plaats :)
echo '<td>';
echo substr( $info['thv'], 0, 17);
echo '';
echo '</td>';
echo '<td>';
Print '<img src=images/Meld/'.$info['soort'] .'.jpg>';
echo '</td>';
}
?>
$datum = date("j/n/Y");
mysql_connect("127.0.0.1", "admin", "***");
mysql_select_db("Database");
$data = mysql_query("SELECT * FROM Meldingen Where Datum = '$datum' ORDER BY Tijd")
or die(mysql_error());
while($info = mysql_fetch_array( $data ))
{
Print "<tr>";
Print "<td>".$info['Datum'] . "</td> ";
Print "<td>".$info['Tijd'] . "</td> ";
Print "<td>".$info['Plaats'] . "</td> "; // Hier wil ik niet het nummer maar de plaats :)
echo '<td>';
echo substr( $info['thv'], 0, 17);
echo '';
echo '</td>';
echo '<td>';
Print '<img src=images/Meld/'.$info['soort'] .'.jpg>';
echo '</td>';
}
?>
En dit is de andere pagina van de website die ik even in elkaar gezet heb om te testen of deze wel een uitput gaf
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
$ID = $_GET["ID"];
// Connects to your Database
mysql_connect("127.0.0.1", "admin", "**") or die(mysql_error());
mysql_select_db("**") or die(mysql_error());
$ID = stripslashes($ID);
$ID = mysql_real_escape_string($ID);
$data = mysql_query("SELECT * FROM Plaatsen WHERE ID = '$ID'")
or die(mysql_error());
while($info = mysql_fetch_array( $data ))
{
Print "<option value=>" .$info['Plaats'] . "</option>";
}
?>
$ID = $_GET["ID"];
// Connects to your Database
mysql_connect("127.0.0.1", "admin", "**") or die(mysql_error());
mysql_select_db("**") or die(mysql_error());
$ID = stripslashes($ID);
$ID = mysql_real_escape_string($ID);
$data = mysql_query("SELECT * FROM Plaatsen WHERE ID = '$ID'")
or die(mysql_error());
while($info = mysql_fetch_array( $data ))
{
Print "<option value=>" .$info['Plaats'] . "</option>";
}
?>
Dus eigelijk de vraag: hoe kan ik zorgen dat deze niet het nummer van de plaats geeft maar de plaatsnaam uit de andere tabel haalt en deze laat zien.
Met vriendelijke groet,
Daan
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
SELECT m.datum, m.tijd, p.plaats
FROM meldingen AS m
LEFT JOIN plaatsen AS p
ON
m.plaats = p.id
WHERE datum = '2012-11-02'
ORDER BY tijd
FROM meldingen AS m
LEFT JOIN plaatsen AS p
ON
m.plaats = p.id
WHERE datum = '2012-11-02'
ORDER BY tijd
Gewijzigd op 02/11/2012 20:33:57 door Ger van Steenderen
"SELECT * FROM Meldingen,Plaatsen WHERE Datum = '$datum' AND Meldingen.ID = Plaatsen.ID ORDER BY Tijd"
@Frank, als je goed in in het openings topic kijkt zie dat plaats weleens leeg kan zijn, en dan kan je geen INNER JOIN gebruiken.
Gewijzigd op 02/11/2012 20:00:45 door Ger van Steenderen
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
$datum = date("j/n/Y");
mysql_connect("127.0.0.1", "admin", "***");
mysql_select_db("Database");
$data = mysql_query("SELECT * FROM Meldingen Where Datum = '$datum' ORDER BY Tijd")
or die(mysql_error());
while($info = mysql_fetch_array( $data ))
{
Print "<tr>";
Print "<td>".$info['Datum'] . "</td> ";
Print "<td>".$info['Tijd'] . "</td> ";
Print "<td>".$info['Plaats'] . "</td> "; // XX
echo '<td>';
echo substr( $info['thv'], 0, 17);
echo '';
echo '</td>';
echo '<td>';
Print '<img src=images/Meld/'.$info['soort'] .'.jpg>';
echo '</td>';
}
?>
$datum = date("j/n/Y");
mysql_connect("127.0.0.1", "admin", "***");
mysql_select_db("Database");
$data = mysql_query("SELECT * FROM Meldingen Where Datum = '$datum' ORDER BY Tijd")
or die(mysql_error());
while($info = mysql_fetch_array( $data ))
{
Print "<tr>";
Print "<td>".$info['Datum'] . "</td> ";
Print "<td>".$info['Tijd'] . "</td> ";
Print "<td>".$info['Plaats'] . "</td> "; // XX
echo '<td>';
echo substr( $info['thv'], 0, 17);
echo '';
echo '</td>';
echo '<td>';
Print '<img src=images/Meld/'.$info['soort'] .'.jpg>';
echo '</td>';
}
?>
Ger, dat sterretje kun je vervangen voor kolomnamen. Het is maar net wat je allemaal wilt zien toch. en ik haal er niet uit dat plaats weleens leeg kan zijn. Bovendien als dat gebeurt wat wil je de gebuiker dan nog laten zien? Jij zou hier een leftjoin gebruiken begrijp ik?
Door de (left) join koppel je de twee tabellen aan elkaar, probeer de query maar eens uit in phpmyadmiin dan zie je het resultaat. Simpel gezegd maak je door de de join 1 'tabel' van 2 tabellen
Toevoeging op 02/11/2012 20:22:52:
Daan: de query zou dus moeten zijn zoals Ger dat aangeeft. waar er wel een spatie moet tussen ASm dus AS m
Toevoeging op 02/11/2012 20:29:27:
dit laat alle kolommnamen en velden zien van de eerste rij. de velden kun je ook laten zien met $data['Plaats'] etc. maar het is belangrijk dat je goed begrijpt WAT een query terug geeft. zoals Ger al zei kun je de query ook in phpmyadmin testen onder het tabje SQL
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
if($info = mysql_fetch_array( $data )) {
foreach($data as $key => $value)
echo $key.': '.$value.'<br/>';
}
?>
if($info = mysql_fetch_array( $data )) {
foreach($data as $key => $value)
echo $key.': '.$value.'<br/>';
}
?>
Geloof maar dat ik niet de enige ben met antipathie daartegen. Je gebruikt dus wel alle kolommen terwijl je ze niet nodig hebt, in ts zijn voorbeeld bv de id en provincie in tabel plaatsen. Maar die id is precies de reden om het niet te doen, want dan wordt met een mysql_fetch_assoc $row['id'] altijd de id van de plaats.
Right nooit aan gedacht. ik gebruik zelf zo veel mogelijk unieke kolomnamen en dan kom je ook niet gauw op het probleem. Maar je argumenten zijn duidelijk. Dank je Ger.