Overzichttabel maken met waarden uit MySQL

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Brecht S

Brecht S

12/12/2014 16:44:00
Quote Anchor link
Ik heb een database projecten:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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


En een database subprojecten:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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


Wat ik zou willen is een overzichtlijst:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
Testproject
 - 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
 
PHP hulp

PHP hulp

22/12/2024 13:06:47
 
Brecht S

Brecht S

13/12/2014 20:36:05
Quote Anchor link
Kan iemand mij hiermee verder helpen?
 

14/12/2014 11:28:45
Quote Anchor link
Je moet dmv een koppeltabel of join de projecten aan elkaar linken.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
// gebruik NOOIT geen hoofdletters in je database kolommen of rijen
$query = 'SELECT * FROM projecten JOIN subprojecten ON projecten.id = subprojecten.projectid';
 
Brecht S

Brecht S

14/12/2014 11:36:23
Quote Anchor link
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?
 

14/12/2014 11:47:48
Quote Anchor link
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.
 
Pipo Clown

Pipo Clown

14/12/2014 11:51:33
Quote Anchor link
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
 

14/12/2014 11:54:20
Quote Anchor link
@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
 
Brecht S

Brecht S

14/12/2014 13:29:45
Quote Anchor link
Zou je een voorbeeld kunnen posten? Ik zie het echt niet.
Dit is het resultaat wat ik wil bekomen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
Testproject
 - 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?
 

14/12/2014 13:34:55
Quote Anchor link
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
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

14/12/2014 21:52:43
Quote Anchor link
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

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
 

14/12/2014 22:03:18
Quote Anchor link
@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.
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

14/12/2014 22:31:33
Quote Anchor link
Rickert, ik persoonlijk vindt het ook handiger, maar om het gebruik van hoofdletters een no-go te verklaren is wel iets anders.
 

14/12/2014 23:20:03
Quote Anchor link
Nee was meer in de zin van hoofdletters in tabelnamen. Voorbeeld;
ProjectenVanPeter

Persoonlijk zou ik zeggen lowercased.
 
Brecht S

Brecht S

16/12/2014 14:45:39
Quote Anchor link
Nu heb ik dit. Ik zie gewoon niet hoe ik die JOIN werkende krijg:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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']; ?> &euro;</td>
    <td style="padding:5px;"><?php echo $row['wer_budget']; ?> &euro;</td>
    <td style="padding:5px;"><?php echo $row['ges_budget'] - $row['wer_budget']; ?> &euro;</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
 
Ward van der Put
Moderator

Ward van der Put

16/12/2014 14:55:53
Quote Anchor link
>> 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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sql1
= "SELECT * FROM subprojecten WHERE project_id = '$project_id'";
?>

Dit kan overigens sneller en veiliger met:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$sql1
= 'SELECT * FROM subprojecten WHERE project_id = ' . (int)$project_id;
?>
 
Brecht S

Brecht S

16/12/2014 16:08:14
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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


Begrijp je wat ik bedoel?
Gewijzigd op 16/12/2014 16:38:52 door Brecht S
 

16/12/2014 16:12:18
Quote Anchor link
Zo pak ej de 2e tabel erbij, en link je weer met de id's

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$sql = "SELECT * FROM subprojecten WHERE project_id = '$project_id'
JOIN taken ON taken.taakid = subprojecten.subproject_id";
 
Brecht S

Brecht S

16/12/2014 16:34:52
Quote Anchor link
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
Gewijzigd op 16/12/2014 16:37:29 door Brecht S
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

16/12/2014 17:01:04
Quote Anchor link
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
 
Brecht S

Brecht S

16/12/2014 17:04:44
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
 
Ward van der Put
Moderator

Ward van der Put

16/12/2014 17:25:33
Quote Anchor link
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.
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.