Overzichttabel maken met waarden uit MySQL
Ik heb een database projecten:
En een database subprojecten:
Wat ik zou willen is een overzichtlijst:
Ik dacht aan iets in de zin van INNER JOIN te gebruiken maar kom er niet uit.
Code (php)
1
2
3
2
3
ID Nummer Naam Startdatum Einddatum
1 1 Testproject 1 12-12-2014 31-12-2014
2 2 Testproject 2 12-12-2014 31-12-2014
1 1 Testproject 1 12-12-2014 31-12-2014
2 2 Testproject 2 12-12-2014 31-12-2014
En een database subprojecten:
Code (php)
1
2
3
4
5
2
3
4
5
ProjectID Naam Startdatum Einddatum
1 Subproject 1 12-12-2014 31-12-2014
1 Subproject 2 12-12-2014 31-12-2014
2 Subproject 3 12-12-2014 31-12-2014
2 Subproject 4 12-12-2014 31-12-2014
1 Subproject 1 12-12-2014 31-12-2014
1 Subproject 2 12-12-2014 31-12-2014
2 Subproject 3 12-12-2014 31-12-2014
2 Subproject 4 12-12-2014 31-12-2014
Wat ik zou willen is een overzichtlijst:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
Testproject
- Subproject 1
- Subproject 2
Testproject 2
- Subproject 3
- Subproject 4
- Subproject 1
- Subproject 2
Testproject 2
- Subproject 3
- Subproject 4
Ik dacht aan iets in de zin van INNER JOIN te gebruiken maar kom er niet uit.
Gewijzigd op 13/12/2014 16:22:34 door Brecht S
Kan iemand mij hiermee verder helpen?
Je moet dmv een koppeltabel of join de projecten aan elkaar linken.
En hoe gaat het dan verder. Kan je een voorbeeld geven? Hoe ik krijg ik dan waarden uit beide kolommen in een tabel? Moet ik dan een group by gebruiken of zo?
De query die ik opgaf geeft het complete resultaat van beide tabellen in 1 resultaat terug.
Wat ik jou gaf is een join die het aan elkaar linked. Geen koppeltabel
Je kan hem letterlijk gebruiken en in php zetten, dat zou meteen moeten werken... mits je een connectie naar de database hebt gemaakt en de query daadwerkelijk uitvoert.
Wat ik jou gaf is een join die het aan elkaar linked. Geen koppeltabel
Je kan hem letterlijk gebruiken en in php zetten, dat zou meteen moeten werken... mits je een connectie naar de database hebt gemaakt en de query daadwerkelijk uitvoert.
Quote:
// gebruik NOOIT geen hoofdletters in je database kolommen of rijen
Een dubbele ontkenning, dat is dan toch hetzelfde als :
// gebruik ALTIJD hoofdletters in je database kolommen of rijen
@pipo, je snapt het toch of ben je aan het miereneuken? Het is gewoon een no-go. Ben je programmeur of Nederlands deskunige.
Man man man man, hier wordt ik niet vrolijk van
Man man man man, hier wordt ik niet vrolijk van
Zou je een voorbeeld kunnen posten? Ik zie het echt niet.
Dit is het resultaat wat ik wil bekomen:
En ik kan toch niet $row['naam'] gebruiken in een while loop omdat die in 2 verschillende tabellen voorkomt? Ik moet toch ergens een group by hebben of niet?
Dit is het resultaat wat ik wil bekomen:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
Testproject
- Subproject 1
- Subproject 2
Testproject 2
- Subproject 3
- Subproject 4
- Subproject 1
- Subproject 2
Testproject 2
- Subproject 3
- Subproject 4
En ik kan toch niet $row['naam'] gebruiken in een while loop omdat die in 2 verschillende tabellen voorkomt? Ik moet toch ergens een group by hebben of niet?
Klopt. Je kan niet dezelfde kolomnamen gebruiken. Dus je moet unieke namen gaan gebruiken.
Tabel: projecten
- kolom: project_id
- kolom: project_naam
- kolom: project_start_datum
- kolom: project_eind_datum
Tabel: subprojecten
- kolom: subproject_id
- kolom: subproject_naam
- kolom: subproject_start_datum
- kolom: subproject_eind_datum
- kolom: subproject_projectid
Query:
SELECT * FROM projecten JOIN subprojecten ON projecten.id = subprojecten.subproject_projectid
Wat je nu terug krijgt van mysql is een array of object met de 2 tabellen gecombineerd.
Je hoeft niets te doen met group_by ofzo
Anders moet je ff me een PM sturen met je Skype, dan kan ik het misschien beter uitleggen 1 op 1
Tabel: projecten
- kolom: project_id
- kolom: project_naam
- kolom: project_start_datum
- kolom: project_eind_datum
Tabel: subprojecten
- kolom: subproject_id
- kolom: subproject_naam
- kolom: subproject_start_datum
- kolom: subproject_eind_datum
- kolom: subproject_projectid
Query:
SELECT * FROM projecten JOIN subprojecten ON projecten.id = subprojecten.subproject_projectid
Wat je nu terug krijgt van mysql is een array of object met de 2 tabellen gecombineerd.
Je hoeft niets te doen met group_by ofzo
Anders moet je ff me een PM sturen met je Skype, dan kan ik het misschien beter uitleggen 1 op 1
Rickert Bombaklats op 14/12/2014 13:34:55:
Klopt. Je kan niet dezelfde kolomnamen gebruiken. Dus je moet unieke namen gaan gebruiken.
Dat kan wel maar niet in combinatie met dit
Rickert Bombaklats op 14/12/2014 13:34:55:
Query:
SELECT * FROM projecten JOIN subprojecten ON projecten.id = subprojecten.subproject_projectid
SELECT * FROM projecten JOIN subprojecten ON projecten.id = subprojecten.subproject_projectid
Want als je het over no-go's wilt hebben is SELECT * bij joins er meer één dan hoofdletters in identifiers, want dat is alleen maar jouw mening
Gewijzigd op 14/12/2014 21:53:20 door Ger van Steenderen
@ger. Ik zelf en mijn collega's geven altijd de commando's aan met hoofdletters, zo kan je sneller zien wat ermee bedoelt wordt.
Uiteraard is het ene eigen mening. Maar die heeft elke programmeur wel.
Uiteraard is het ene eigen mening. Maar die heeft elke programmeur wel.
Rickert, ik persoonlijk vindt het ook handiger, maar om het gebruik van hoofdletters een no-go te verklaren is wel iets anders.
Nee was meer in de zin van hoofdletters in tabelnamen. Voorbeeld;
ProjectenVanPeter
Persoonlijk zou ik zeggen lowercased.
ProjectenVanPeter
Persoonlijk zou ik zeggen lowercased.
Nu heb ik dit. Ik zie gewoon niet hoe ik die JOIN werkende krijg:
Ik krijg nu alle subprojecten die onder een bepaald project hangen. Alleen nu nog de taken kunnen weergeven die onder die subprojecten hangen en dat zie ik niet.
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
29
30
31
32
33
34
35
36
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
29
30
31
32
33
34
35
36
<?php
$project_id = $_GET['project_id'];
$sql1 = "SELECT * FROM subprojecten WHERE project_id = '$project_id'";
$res1 = mysql_query($sql1) or die (mysql_error());
while($row = mysql_fetch_assoc($res1))
{
?>
<tr>
<td style="padding:5px;"><?php echo $row['subproject_naam']; ?></td>
<td style="padding:5px;"><?php echo $row['type']; ?></td>
<td style="padding:5px;"><?php echo $row['status']; ?></td>
<td style="padding:5px;"><?php echo $row['omschrijving']; ?></td>
<td style="padding:5px;"><?php echo $row['toewijzen_id']; ?></td>
<td style="padding:5px;"><?php echo $row['ges_tijd']; ?> h</td>
<td style="padding:5px;"><?php echo $row['wer_tijd']; ?> h</td>
<td style="padding:5px;"><?php echo $row['ges_budget']; ?> €</td>
<td style="padding:5px;"><?php echo $row['wer_budget']; ?> €</td>
<td style="padding:5px;"><?php echo $row['ges_budget'] - $row['wer_budget']; ?> €</td>
<?php
if ($row['ges_budget'] - $row['wer_budget'] > 0) { ?>
<td style="padding:5px;"><div class="label label-secondary">Success</div></td>
<?php } elseif ($row['ges_budget'] - $row['wer_budget'] == 0) { ?>
<td style="padding:5px;"><div class="label label-warning">Warning</div></td>
<?php } else { ?>
<td style="padding:5px;"><div class="label label-danger">Danger</div></td>
<?php } ?>
</tr>
<?php } ?>
</table>
$project_id = $_GET['project_id'];
$sql1 = "SELECT * FROM subprojecten WHERE project_id = '$project_id'";
$res1 = mysql_query($sql1) or die (mysql_error());
while($row = mysql_fetch_assoc($res1))
{
?>
<tr>
<td style="padding:5px;"><?php echo $row['subproject_naam']; ?></td>
<td style="padding:5px;"><?php echo $row['type']; ?></td>
<td style="padding:5px;"><?php echo $row['status']; ?></td>
<td style="padding:5px;"><?php echo $row['omschrijving']; ?></td>
<td style="padding:5px;"><?php echo $row['toewijzen_id']; ?></td>
<td style="padding:5px;"><?php echo $row['ges_tijd']; ?> h</td>
<td style="padding:5px;"><?php echo $row['wer_tijd']; ?> h</td>
<td style="padding:5px;"><?php echo $row['ges_budget']; ?> €</td>
<td style="padding:5px;"><?php echo $row['wer_budget']; ?> €</td>
<td style="padding:5px;"><?php echo $row['ges_budget'] - $row['wer_budget']; ?> €</td>
<?php
if ($row['ges_budget'] - $row['wer_budget'] > 0) { ?>
<td style="padding:5px;"><div class="label label-secondary">Success</div></td>
<?php } elseif ($row['ges_budget'] - $row['wer_budget'] == 0) { ?>
<td style="padding:5px;"><div class="label label-warning">Warning</div></td>
<?php } else { ?>
<td style="padding:5px;"><div class="label label-danger">Danger</div></td>
<?php } ?>
</tr>
<?php } ?>
</table>
Ik krijg nu alle subprojecten die onder een bepaald project hangen. Alleen nu nog de taken kunnen weergeven die onder die subprojecten hangen en dat zie ik niet.
Gewijzigd op 16/12/2014 14:46:28 door Brecht S
>> Ik krijg nu alle subprojecten die onder een bepaald project hangen. Alleen nu nog de taken kunnen weergeven die onder die subprojecten hangen en dat zie ik niet.
Laat eens de structuur van de tabel met taken zien?
Er staan namelijk geen taken maar alleen subprojecten in je query:
Dit kan overigens sneller en veiliger met:
Laat eens de structuur van de tabel met taken zien?
Er staan namelijk geen taken maar alleen subprojecten in je query:
Dit kan overigens sneller en veiliger met:
De taken tabel heeft volgende velden:
id, project_id, subproject_id, taak_naam, omschrijving en dan nog een reeks met budgetten en gepresteerde uren (niet meer belangrijk voor de query).
Nu is het wel zo dat er sommige taken zijn die onder een subproject vallen maar ook direct onder een project kunnen vallen.
Begrijp je wat ik bedoel?
id, project_id, subproject_id, taak_naam, omschrijving en dan nog een reeks met budgetten en gepresteerde uren (niet meer belangrijk voor de query).
Nu is het wel zo dat er sommige taken zijn die onder een subproject vallen maar ook direct onder een project kunnen vallen.
Code (php)
1
2
3
4
2
3
4
id project_id subproject_id taak_naam omschrijving
1 1 1 taak 1 Omschrijving taak 1
2 1 2 taak 2 Omschrijving van taak 2
3 2 taak 3 Omschrijving van taak 3
1 1 1 taak 1 Omschrijving taak 1
2 1 2 taak 2 Omschrijving van taak 2
3 2 taak 3 Omschrijving van taak 3
Begrijp je wat ik bedoel?
Gewijzigd op 16/12/2014 16:38:52 door Brecht S
Zo pak ej de 2e tabel erbij, en link je weer met de id's
Ik was de id vergeten in de takentabel. Heb het aangepast. Ok, ik probeer even met je query of dit lukt.
Toevoeging op 16/12/2014 16:37:44:
Nu krijg ik een foutmelding:
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 'JOIN taken ON taken.id = subprojecten.subproject_id' at line 1
Toevoeging op 16/12/2014 16:37:44:
Nu krijg ik een foutmelding:
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 'JOIN taken ON taken.id = subprojecten.subproject_id' at line 1
Gewijzigd op 16/12/2014 16:37:29 door Brecht S
Gebruik NOOIT SELECT *
De JOIN in de query van Rickert staat volledig verkeerd, een join is onderdeel van de FROM dus moet voor de WHERE
De JOIN in de query van Rickert staat volledig verkeerd, een join is onderdeel van de FROM dus moet voor de WHERE
Code (php)
1
$sql = "SELECT * FROM subprojecten JOIN taken ON taken.id = subprojecten.subproject_id WHERE project_id = '$project_id'";
Als ik dat probeer krijg ik dit:
Column 'project_id' in where clause is ambiguous
Gewijzigd op 16/12/2014 17:05:19 door Brecht S
Dat komt doordat je met SELECT * alle kolommen selecteert en daardoor vervolgens de kolom project_id uit meerdere tabellen. Die kolom is dan dubbelzinnig.
Aangezien je WHERE project_id = '$project_id' met een bekende ID gebruikt, hoef je helemaal geen project_id uit de database te halen. Dus: herschrijf die SELECT * tot de kolommen die je nodig hebt in het resultaat.
Aangezien je WHERE project_id = '$project_id' met een bekende ID gebruikt, hoef je helemaal geen project_id uit de database te halen. Dus: herschrijf die SELECT * tot de kolommen die je nodig hebt in het resultaat.




