Overzichttabel maken met waarden uit MySQL
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?
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?
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
Man man man man, hier wordt ik niet vrolijk van
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?
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
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.
ProjectenVanPeter
Persoonlijk zou ik zeggen lowercased.
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
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:
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
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
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
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.