SQL join weergeven in HTML

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ben Janssen

Ben Janssen

26/06/2012 11:44:01
Quote Anchor link
Beste,

Ik heb 2 tabellen met de gegevens.
Nu wil ik ze in HTML weergeven, en dat werkt perfect.

Maar nu krijg ik voor elke rij in tabel "social" een aparte weergave.
De bedoeling is dat bij "FACE" alle info van "social" word weergegeven.

Hier staat een voorbeeld van hoe het nu is.
http://www.thetimberwolves.nl/team2.php

FACE is gelijk aan Social media.

Kan iemand mij helpen dit op te lossen.

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
<?php

/**
 * @author Ben Janssen
 * @copyright 2012
 */


ini_set('display_errors',1);
error_reporting(E_ALL);

include 'cfg/cfg.php';
mysql_select_db($db,$con);
$sql = 'SELECT * FROM team,social WHERE social.tid=team.id LIMIT 0, 100 ';
$rst = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_array($rst))
{


echo ('

<tr id="PIC"><td class="SB2" rowspan="9"><img src="../img/ttwm/'
.$row['img'].'" alt="MBRpic" class="pic"/></td></tr>
<tr id="NAAM"><td class="SB3">Naam :</td><td class="SB">'
.$row['nm'].'</td></tr>
<tr id="CALL"><td class="SB3">Call sign :</td><td class="SB">'
.$row['fn'].'</td></tr>
<tr id="TYPE"><td class="SB3">Type speler :</td><td class="SB">'
.$row['ts'].'</td></tr>
<tr id="RANK"><td class="SB3">Team rank :</td><td class="SB">'
.$row['tr'].'</td></tr>
<tr id="SINDS"><td class="SB3">Paintball sinds :</td><td class="SB">'
.$row['ps'].'</td></tr>
<tr id="MARKER"><td class="SB3">Favorite marker :</td><td class="SB">'
.$row['fm'].'</td></tr>
<tr id="INTREST"><td class="SB3">Andere intresse :</td><td class="SB">'
.$row['ai'].'</td></tr>
<tr id="FACE"><td class="SB3">Social media :</td><td class="SB"><a href="'
.$row['tid'].'" target="_blank">
    <img alt="Social media" style="border:0px" src="../img/'
.$row['pic'].'"/></a></td></tr>
<tr><td colspan="3">&nbsp;</td></tr>
'
);
}

?>
 
PHP hulp

PHP hulp

26/11/2024 02:15:22
 
John Cena

John Cena

26/06/2012 11:46:41
Quote Anchor link
Wat gaat er precies mis...?
 
Ben Janssen

Ben Janssen

26/06/2012 11:50:42
Quote Anchor link
In tabel team heeft 1 persoon een dubbele media welke in tabel social staat.
Nu word die persoon 2x weergegeven ipv 1x.
 
Frank WD

Frank WD

26/06/2012 11:52:48
Quote Anchor link
Je moet je While-loop onder verdelen in 2 sectie's.
1e sectie word voor alles wat maar 1x moet worden geteld, in dit geval zou dit de naam afbeelding enz....... zijn.

2e sectie komt dus je social media linken en plaatje te staan.

Even voorbeeld:
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
<?php
$i
=1;
while($row = mysql_fetch_assoc($result))
{

    if($i == 1)
    {
    
        // Hier alles neer zetten wat maar 1x getoont hoeft te worden.
        // Voorbeeld je Plaatje, naam enz.........

    } // end of if
        // Hier zet je dus de Social Media linken en plaatjes.
//hoog de $i op voor het volgende record

$i++;
}
// end of while()
?>


Verder:
- Let op Foutafhandeling bij je query. Je gebruikt nu or die().
Dit is iets uit de stenen tijd perk en word niet meer gebruikt. Komt dus beetje op neer met or die() op deze zin: Als jij iets fout doet, ga je dan ook gelijk dood?
- In je query gebruik je nu SELECT *. Je kunt beter op de plek van de * de velden compleet benoemen. Wat je nu doet is telkens alles ophalen wat in de tabel zet. Nu heb je misschien alles wel nodig, alleen is je query nu onduidelijk welke velden je nu gebruikt en hoe ze worden genoemd. Wat inhoud dat je bijna altijd in je database moet kijken welke benaming je hebt gebruikt. Tevens is velden benoemen ook snelheids winst van je query.
Gewijzigd op 26/06/2012 11:57:05 door Frank WD
 
Ben Janssen

Ben Janssen

26/06/2012 12:10:18
Quote Anchor link
ok, heb het net geprobeerd, maar ik denk dat ik nog wat meer uitleg nodig heb.
heb nu de volgende code.

ik krijg nu alleen de eerste te zien, en een hoop aparte regels + een foutmelding waar ik niks van snap.

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
37
38
39
40
<?php

/**
 * @author Ben Janssen
 * @copyright 2012
 */


ini_set('display_errors',1);
error_reporting(E_ALL);

include 'cfg/cfg.php';
mysql_select_db($db,$con);
$sql = 'SELECT * FROM team,social WHERE social.tid=team.id LIMIT 0, 100 ';
$rst = mysql_query($sql) or die(mysql_error());
while($row = mysql_fetch_array($rst))
{

    if($i == 1)
    {

        echo('
        <tr id="PIC"><td class="SB2" rowspan="9"><img src="../img/ttwm/'
.$row['img'].'" alt="MBRpic" class="pic"/></td></tr>
        <tr id="NAAM"><td class="SB3">Naam :</td><td class="SB">'
.$row['nm'].'</td></tr>
        <tr id="CALL"><td class="SB3">Call sign :</td><td class="SB">'
.$row['fn'].'</td></tr>
        <tr id="TYPE"><td class="SB3">Type speler :</td><td class="SB">'
.$row['ts'].'</td></tr>
        <tr id="RANK"><td class="SB3">Team rank :</td><td class="SB">'
.$row['tr'].'</td></tr>
        <tr id="SINDS"><td class="SB3">Paintball sinds :</td><td class="SB">'
.$row['ps'].'</td></tr>
        <tr id="MARKER"><td class="SB3">Favorite marker :</td><td class="SB">'
.$row['fm'].'</td></tr>
        <tr id="INTREST"><td class="SB3">Andere intresse :</td><td class="SB">'
.$row['ai'].'</td></tr>
        '
);
    }
// end of if
        // Hier zet je dus de Social Media linken en plaatjes.
//hoog de $i op voor het volgende record

$i++;
echo ('
<tr id="FACE"><td class="SB3">Social media :</td><td class="SB"><a href="'
.$row['tid'].'" target="_blank">
    <img alt="Social media" style="border:0px" src="../img/'
.$row['pic'].'"/></a></td></tr>
<tr><td colspan="3">&nbsp;</td></tr>
'
);
}
// end of while()

?>


Toevoeging op 26/06/2012 12:13:42:

Wat betreft SELECT *, is een goeie tip, zal er in het vervolg rekening mee houden.
Echter heeft het nu weinig zin denk ik, omdat alles opgehaald dient te worden.
Het maakt dus niet echt uit welke namen er staan, omdat alles nodig is.
 
Frank WD

Frank WD

26/06/2012 12:24:11
Quote Anchor link
De error geeft aan dat nergens die $i++; word gezet.
Als je mijn code met jou code vergelijkt zie je dat je een stukje code boven de while bent vergeten. code zou moeten zijn
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
37
38
39
40
41
<?php

/**
 * @author Ben Janssen
 * @copyright 2012
 */


ini_set('display_errors',1);
error_reporting(E_ALL);

include 'cfg/cfg.php';
mysql_select_db($db,$con);
$sql = 'SELECT * FROM team,social WHERE social.tid=team.id LIMIT 0, 100 ';
$rst = mysql_query($sql) or die(mysql_error());
$i=1;
while($row = mysql_fetch_array($rst))
{

    if($i == 1)
    {

        echo'
        <tr id="PIC"><td class="SB2" rowspan="9"><img src="../img/ttwm/'
.$row['img'].'" alt="MBRpic" class="pic"/></td></tr>
        <tr id="NAAM"><td class="SB3">Naam :</td><td class="SB">'
.$row['nm'].'</td></tr>
        <tr id="CALL"><td class="SB3">Call sign :</td><td class="SB">'
.$row['fn'].'</td></tr>
        <tr id="TYPE"><td class="SB3">Type speler :</td><td class="SB">'
.$row['ts'].'</td></tr>
        <tr id="RANK"><td class="SB3">Team rank :</td><td class="SB">'
.$row['tr'].'</td></tr>
        <tr id="SINDS"><td class="SB3">Paintball sinds :</td><td class="SB">'
.$row['ps'].'</td></tr>
        <tr id="MARKER"><td class="SB3">Favorite marker :</td><td class="SB">'
.$row['fm'].'</td></tr>
        <tr id="INTREST"><td class="SB3">Andere intresse :</td><td class="SB">'
.$row['ai'].'</td></tr>
        '
;
    }
// end of if
        // Hier zet je dus de Social Media linken en plaatjes.

echo '
<tr id="FACE"><td class="SB3">Social media :</td><td class="SB"><a href="'
.$row['tid'].'" target="_blank">
    <img alt="Social media" style="border:0px" src="../img/'
.$row['pic'].'"/></a></td></tr>
<tr><td colspan="3">&nbsp;</td></tr>
'
;
//hoog de $i op voor het volgende record
$i++;
}
// end of while()

?>

Wat betreft die *. Je kan beter nooit die * gebruiken ook al heb je alles nodig.

EDIT:
Op onderstaande manier is je query gewoon veel duidelijke voor je zelf maar ook voor een mede scripter die een aanpassing moet doen. Wat ik ook nog mee wil geven. Probeer zoveel mogelijk volledige namen te gebruiken en geen afkortingen. Want weet je over een half jaar nog wat velden ts, tr of ai betekenen en welke gegevens daar bij horen?

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
<?php
$sql
= 'SELECT
        img,
        nm,
        fn,
        ts,
        tr,
        ps,
        fm,
        ai,
        pic
    FROM
        team,
        social
    WHERE
        social.tid=team.id
    LIMIT 0, 100 '
;
?>
Gewijzigd op 26/06/2012 12:31:51 door Frank WD
 
Ben Janssen

Ben Janssen

26/06/2012 12:30:29
Quote Anchor link
De foutmelding is nu weg, maar ik krijg nog niet het gewenste resultaat.
je kunt het hier zien.

http://www.thetimberwolves.nl/team2.php

Toevoeging op 26/06/2012 12:50:10:

Ik ben er tot zover niet in geslaagd om de social items op 1 lijn te krijgen

Toevoeging op 27/06/2012 00:19:32:

@Frank
Bedankt voor de goeie tips, hier ga ik zeker mee aan de slag.

Weet iemand nog een oplossing voor me, want het is nog niet opgelost.
Ik krijg de meerdere social media niet in 1 lijn bij elkaar.

Toevoeging op 27/06/2012 00:23:06:

Ik zie nu dat er zelfs een aantal ontbreken.
Die hebben ook geen social media ingesteld, maar horen wel in de lijst te staan.
 



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.