result van join verkeerde uitkomst.
Ik heb een JOIN Query die de verkeerde waarde geeft.
Verder werkt de complete query na wens, alleen ik heb een extra while() nodig.
Maar deze krijg ik niet gezet in de code. Dit omdat ik gewoon weg niet weet waar en hoe ik dit moet gaan aanpakken.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Gewenste uitkomst:
+--------------------+
| Jannes |
+---------+----------+
| track 1 | track 2 |
+---------+----------+
Huidige uitkomst:
+--------------------+
| Jannes |
+---------+----------+
| track 1 | track 2 |
+---------+----------+
| track 1 | track 2 | Deze is van de volgende artiest.
+---------+----------+
+--------------------+
| Jannes |
+---------+----------+
| track 1 | track 2 |
+---------+----------+
Huidige uitkomst:
+--------------------+
| Jannes |
+---------+----------+
| track 1 | track 2 |
+---------+----------+
| track 1 | track 2 | Deze is van de volgende artiest.
+---------+----------+
De bedoeling is dus, dat ik 1x de artiest binnen haal van table 1. Daarna moet de bij behorende tracks uit table 1_2 gehaald worden. Zover ik weet heb ik daar 2 while() voor nodig. 1x voor de artiest uit table 1 en 1x voor de tracks uit table 1_2.
Omdat er in table 1_2 meerdere tracks kunnen staan.
Wie kan mij helpen met de 2e while() te zetten in de code hier onder.
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<?php
include ("config.php");
// Hulpvariabelen voor Tabellen maken
$aantal_kolommen = 2;
$kolom_breedte = 343; // in pixels
$huidige_kolom = 0; // als deze variabele de waarde 0 heeft dan is er een rij afgelopen en moet er een nieuwe beginnen
$date = date("Y");
define( 'DEBUG_MODE', true );
$query = "SELECT
1.1_id,
1.artiest,
1_2.1_id,
1_2.track
FROM
1
INNER JOIN
1_2
ON
1.1_id = 1_2.1_id
ORDER BY
1_2.1_id
DESC
";
$result = mysql_query( $query );
if ( false === $result )
{
echo '<p>Er is iets fout gegaan bij ophalen van de gegevens.<br />';
if ( constant( 'DEBUG_MODE' ) )
{
echo '<br />Foutmelding: ' . mysql_error() . '
<br />Query: ' . htmlspecialchars( $query );
}
echo '</p>';
}
else
{
if(mysql_num_rows($result) > 0)
{ // Begin if voor om te kijken als er Rows bestaan of niet.
echo '
<table width="'.$aantal_kolommen * $kolom_breedte.'" border="0" cellspacing="1" cellpadding="2">
<tr>
<td>
'.htmlspecialchars($row['artiest']).'
</td>
</tr>
<tr>';
while($row = mysql_fetch_assoc($result))
{
// We gaan de kolommen opmaken
echo '
<td width="'.$kolom_breedte.'">
'.htmlspecialchars($row['track']).'
</td>';
// we zijn een kolom verder, verhoog $huidige_kolom
$huidige_kolom++;
// waren we klaar met een rij ?
if($huidige_kolom == $aantal_kolommen)
{
// sluit de rij af en reset $huidige_kolom
echo '</tr>';
$huidige_kolom = 0;
}
} // Einde Whileloop
// fix voor de laatste rij - was een rij volledig gevuld ?
if($huidige_kolom != 0)
{
// rij was nog niet vol(ledig) - vul de resterende cellen op met "stuffing"
for($i = $huidige_kolom; $i < $aantal_kolommen; $i++)
{
// in plaats van kun je de cel ook met iets anders vullen natuurlijk
echo '<td width='.$kolom_breedte.'> </td>';
}
// sluit tenslotte de rij alsnog af
echo '</tr>';
}
// Einde van de Table
echo '</table>';
} // Einde if om te kijken of er rows bestaan.
else
{
echo '
Er is geen gegevens beschikbaar.';
} // Einde else voor als er geen Rows bestaan
} // End of else
?>
include ("config.php");
// Hulpvariabelen voor Tabellen maken
$aantal_kolommen = 2;
$kolom_breedte = 343; // in pixels
$huidige_kolom = 0; // als deze variabele de waarde 0 heeft dan is er een rij afgelopen en moet er een nieuwe beginnen
$date = date("Y");
define( 'DEBUG_MODE', true );
$query = "SELECT
1.1_id,
1.artiest,
1_2.1_id,
1_2.track
FROM
1
INNER JOIN
1_2
ON
1.1_id = 1_2.1_id
ORDER BY
1_2.1_id
DESC
";
$result = mysql_query( $query );
if ( false === $result )
{
echo '<p>Er is iets fout gegaan bij ophalen van de gegevens.<br />';
if ( constant( 'DEBUG_MODE' ) )
{
echo '<br />Foutmelding: ' . mysql_error() . '
<br />Query: ' . htmlspecialchars( $query );
}
echo '</p>';
}
else
{
if(mysql_num_rows($result) > 0)
{ // Begin if voor om te kijken als er Rows bestaan of niet.
echo '
<table width="'.$aantal_kolommen * $kolom_breedte.'" border="0" cellspacing="1" cellpadding="2">
<tr>
<td>
'.htmlspecialchars($row['artiest']).'
</td>
</tr>
<tr>';
while($row = mysql_fetch_assoc($result))
{
// We gaan de kolommen opmaken
echo '
<td width="'.$kolom_breedte.'">
'.htmlspecialchars($row['track']).'
</td>';
// we zijn een kolom verder, verhoog $huidige_kolom
$huidige_kolom++;
// waren we klaar met een rij ?
if($huidige_kolom == $aantal_kolommen)
{
// sluit de rij af en reset $huidige_kolom
echo '</tr>';
$huidige_kolom = 0;
}
} // Einde Whileloop
// fix voor de laatste rij - was een rij volledig gevuld ?
if($huidige_kolom != 0)
{
// rij was nog niet vol(ledig) - vul de resterende cellen op met "stuffing"
for($i = $huidige_kolom; $i < $aantal_kolommen; $i++)
{
// in plaats van kun je de cel ook met iets anders vullen natuurlijk
echo '<td width='.$kolom_breedte.'> </td>';
}
// sluit tenslotte de rij alsnog af
echo '</tr>';
}
// Einde van de Table
echo '</table>';
} // Einde if om te kijken of er rows bestaan.
else
{
echo '
Er is geen gegevens beschikbaar.';
} // Einde else voor als er geen Rows bestaan
} // End of else
?>
Gewijzigd op 26/03/2012 21:35:14 door Remco schrubben
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
cur_id = 0;
while ($row = mysql_fetch_assoc($result)) {
if ($row['artist_id'] != cur_id) {
cur_id = $row['artist_id'];
// en de andere dingen die voor een nieuwe artiest moet doen
}
else {
//wat je normaal doet
}
}
?>
cur_id = 0;
while ($row = mysql_fetch_assoc($result)) {
if ($row['artist_id'] != cur_id) {
cur_id = $row['artist_id'];
// en de andere dingen die voor een nieuwe artiest moet doen
}
else {
//wat je normaal doet
}
}
?>
Maar ik wil je toch wel zeer dringend adviseren je tabellen fatsoenlijk te benoemen!
Bedankt voor het voorbeeld ik ga hier vandaag even mee aan het werk.
Hou AUB op over de tabellen. Ik zit hier een systeem van ander af te maken.
Ik ben er bijna, zodra het werkt ga ik de tabellen idd anders noemen, want dit lijkt nergens op.
Toch bedankt voor de tip ;)
EDIT:
Ger ik krijg een melding op de cur_id =0;
Parse error: syntax error, unexpected '=' in ../../testen.php on line 48
Gewijzigd op 27/03/2012 09:27:43 door remco schrubben
Sorry dat moet natuurlijk $cur_id zijn, excusez moi.
Krijg hem alleen nog niet in bovenstaande code verwerkt.
Even stoeien nog of heb je een tip om te verwerken in bovenstaande code?
En nog en tip: bouw de html op in var en dan in 1x echoen.
Let op !! Ik weet het, het zijn geen duidelijke table namen. Dit word aangepast.
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
37
38
39
40
41
42
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
42
+----------------------------------------------------------+
| Dit is de uitkomst van de query zoals beschreven |
+----------------+-----------------------------------------+
| Table 1 | Table 1.2 |
+------+---------+----+------+-----------------------------+
| 1_id | artiest | id | 1_id | track |
+------+---------+----+------+-----------------------------+
| 1 | jannes | 1 | 1 | ga dan |
+------+---------+----+------+-----------------------------+
| 1 | jannes | 2 | 1 | 'n paradijs |
+------+---------+----+------+-----------------------------+
| 1 | jannes | 3 | 1 | ik ben jannes |
+------+---------+----+------+-----------------------------+
| 2 | F Bauer | 4 | 2 | De Wereld Is Een Gekkenhuis |
+------+---------+----+------+-----------------------------+
| 2 | F Bauer | 5 | 2 | Wat moet ik toch zonder jou |
+------+---------+----+------+-----------------------------+
+----------------------------------------------------------+
| Dit is de gewenste uitkomst van de query |
+----------------+-----------------------------------------+
| Table 1 | Table 1.2 |
+------+---------+----+------+-----------------------------+
| 1_id | artiest | id | 1_id | track |
+------+---------+----+------+-----------------------------+
| 1 | jannes | 1 | 1 | ga dan |
+------+---------+----+------+-----------------------------+
| 1 | jannes | 2 | 1 | 'n paradijs |
+------+---------+----+------+-----------------------------+
| 1 | jannes | 3 | 1 | ik ben jannes |
+------+---------+----+------+-----------------------------+
+------------------------------------------------+
| Hoe het in de tabellen op de pagina moet komen |
| Dit met een LIMIT 1 op de table 1 |
+------------------------------------------------+
| Jannes |
+------------------------------------------------+
| Ga dan | 'n Paradijs |
+------------------------------------------------+
| Ik ben Jannes | |
+--------------------+---------------------------+
| Dit is de uitkomst van de query zoals beschreven |
+----------------+-----------------------------------------+
| Table 1 | Table 1.2 |
+------+---------+----+------+-----------------------------+
| 1_id | artiest | id | 1_id | track |
+------+---------+----+------+-----------------------------+
| 1 | jannes | 1 | 1 | ga dan |
+------+---------+----+------+-----------------------------+
| 1 | jannes | 2 | 1 | 'n paradijs |
+------+---------+----+------+-----------------------------+
| 1 | jannes | 3 | 1 | ik ben jannes |
+------+---------+----+------+-----------------------------+
| 2 | F Bauer | 4 | 2 | De Wereld Is Een Gekkenhuis |
+------+---------+----+------+-----------------------------+
| 2 | F Bauer | 5 | 2 | Wat moet ik toch zonder jou |
+------+---------+----+------+-----------------------------+
+----------------------------------------------------------+
| Dit is de gewenste uitkomst van de query |
+----------------+-----------------------------------------+
| Table 1 | Table 1.2 |
+------+---------+----+------+-----------------------------+
| 1_id | artiest | id | 1_id | track |
+------+---------+----+------+-----------------------------+
| 1 | jannes | 1 | 1 | ga dan |
+------+---------+----+------+-----------------------------+
| 1 | jannes | 2 | 1 | 'n paradijs |
+------+---------+----+------+-----------------------------+
| 1 | jannes | 3 | 1 | ik ben jannes |
+------+---------+----+------+-----------------------------+
+------------------------------------------------+
| Hoe het in de tabellen op de pagina moet komen |
| Dit met een LIMIT 1 op de table 1 |
+------------------------------------------------+
| Jannes |
+------------------------------------------------+
| Ga dan | 'n Paradijs |
+------------------------------------------------+
| Ik ben Jannes | |
+--------------------+---------------------------+
Schema drie zoals ik het terug zou willen op de pagina. Dat word dus geregeld met de tabellen scriptje. Deze tabellen scripte werkt overigens prima na wens. Ik krijg alleen de result niet goed na wens. Hoop dat iemand mij hier echt mee kan helpen.
Gewijzigd op 28/03/2012 22:17:54 door remco schrubben
Remco schrubben op 27/03/2012 18:58:03:
Let op !! Ik weet het, het zijn geen duidelijke table namen. Dit word aangepast.
Let op !! Ik weet het, het zijn geen duidelijke table namen. Dit word aangepast.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
+----------------------------------------------------------+
| Dit is de uitkomst van de query zoals beschreven |
+----------------+-----------------------------------------+
| Table 1 | Table 1.2 |
+------+---------+----+------+-----------------------------+
| 1_id | artiest | id | 1_id | track |
+------+---------+----+------+-----------------------------+
| 1 | jannes | 1 | 1 | ga dan |
+------+---------+----+------+-----------------------------+
| 1 | jannes | 2 | 1 | 'n paradijs |
+------+---------+----+------+-----------------------------+
| 1 | jannes | 3 | 1 | ik ben jannes |
+------+---------+----+------+-----------------------------+
| 1 | F Bauer | 1 | 2 | De Wereld Is Een Gekkenhuis |
+------+---------+----+------+-----------------------------+
| 1 | F Bauer | 2 | 2 | Wat moet ik toch zonder jou |
+------+---------+----+------+-----------------------------+
| Dit is de uitkomst van de query zoals beschreven |
+----------------+-----------------------------------------+
| Table 1 | Table 1.2 |
+------+---------+----+------+-----------------------------+
| 1_id | artiest | id | 1_id | track |
+------+---------+----+------+-----------------------------+
| 1 | jannes | 1 | 1 | ga dan |
+------+---------+----+------+-----------------------------+
| 1 | jannes | 2 | 1 | 'n paradijs |
+------+---------+----+------+-----------------------------+
| 1 | jannes | 3 | 1 | ik ben jannes |
+------+---------+----+------+-----------------------------+
| 1 | F Bauer | 1 | 2 | De Wereld Is Een Gekkenhuis |
+------+---------+----+------+-----------------------------+
| 1 | F Bauer | 2 | 2 | Wat moet ik toch zonder jou |
+------+---------+----+------+-----------------------------+
Als je goed kijkt zie je dat er iets vreemds gebeurt, kijk maar eens naar de de eerste en de vierde kolom. En dan de derde kolom dan zie ik bij Frans bauer de track id van Jannes. Dit heeft met de aan zekerheid grenzende waarschijnlijkheid toch te maken met de naamgeving van je tabellen.
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
[code]<?php
$sql = "SELECT a.artist_id,
a.a_name,
t.track_id,
t.titlle
FROM artists AS a
JOIN tracks AS t USING (artist_id)";
$result = mysql_query($sql);
$html = '';
cur_id = 0;
while ($row = mysql_fetch_assoc($result)) {
if ($row['artist_id'] != cur_id) {
if (cur_id > 0) {
$html .= "</table>";
}
cur_id = $row['artist_id'];
$html .= '<tr><td colspan="' . $aantalkolommen . '">' .
$row['a_name'] . '</td></tr>';
$huidigekolom = 0;
}
// hier wat je normaal doet
}
$html .= '</table>';
echo $html;
?>
?>
[code]<?php
$sql = "SELECT a.artist_id,
a.a_name,
t.track_id,
t.titlle
FROM artists AS a
JOIN tracks AS t USING (artist_id)";
$result = mysql_query($sql);
$html = '';
cur_id = 0;
while ($row = mysql_fetch_assoc($result)) {
if ($row['artist_id'] != cur_id) {
if (cur_id > 0) {
$html .= "</table>";
}
cur_id = $row['artist_id'];
$html .= '<tr><td colspan="' . $aantalkolommen . '">' .
$row['a_name'] . '</td></tr>';
$huidigekolom = 0;
}
// hier wat je normaal doet
}
$html .= '</table>';
echo $html;
?>
?>
Gewijzigd op 28/03/2012 08:25:38 door Ger van Steenderen
@Ger: gezien de kleurtjes gaat er iets niet goed in je code (regel 18).
Je hebt gelijk, het is nog vroeg hé. Heb het aangepast.
Wat jij aanhaalt met de id's van frans bouwer.
Ik heb de schema even getikt in notepad++ en daar heb ik in alle waarschijnlijkheid niet zo snel door gehad toen ik het hier poste.
Ik ga dat even verandering in het schema en ga zo gelijk jou code even testen.
Bedankt al vast weer voor de genomen moeite.
Toevoeging op 28/03/2012 22:32:32:
Onder tussen de code van Ger geprobeerd. Tevens zijn de tabellen namen ook verandert. Deze zijn nu beter overzichtelijk en nog steeds na wens van de gebruiker.
De query en code is geworden:
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
37
38
39
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
<?php
[code]<?php
include ("config.php");
$sql = "SELECT
ts.ts_id,
ts.ts_titel,
ts.poll
ts_optie.id,
ts_optie.ts_id
ts_optie.artiest
ts_optie.titel
ts_optie.cover
FROM
ts
JOIN
ts_optie
USING (id)";
$result = mysql_query($sql);
$html = '';
$cur_id = 0;
while ($row = mysql_fetch_assoc($result)) {
if ($row['artist_id'] != $cur_id) {
if ($cur_id > 0) {
$html .= "</table>";
}
$cur_id = $row['ts_id'];
$html .= '<tr><td colspan="' . $aantalkolommen . '">' .
$row['ts_titel'] . '</td></tr>';
$huidigekolom = 0;
}
// hier wat je normaal doet
}
$html .= '</table>';
echo $html;
?>
/>
Krijg nu alleen de melding:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in ../../../../verkiezing.php on line 21
[code]<?php
include ("config.php");
$sql = "SELECT
ts.ts_id,
ts.ts_titel,
ts.poll
ts_optie.id,
ts_optie.ts_id
ts_optie.artiest
ts_optie.titel
ts_optie.cover
FROM
ts
JOIN
ts_optie
USING (id)";
$result = mysql_query($sql);
$html = '';
$cur_id = 0;
while ($row = mysql_fetch_assoc($result)) {
if ($row['artist_id'] != $cur_id) {
if ($cur_id > 0) {
$html .= "</table>";
}
$cur_id = $row['ts_id'];
$html .= '<tr><td colspan="' . $aantalkolommen . '">' .
$row['ts_titel'] . '</td></tr>';
$huidigekolom = 0;
}
// hier wat je normaal doet
}
$html .= '</table>';
echo $html;
?>
/>
Krijg nu alleen de melding:
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in ../../../../verkiezing.php on line 21
Volgens mij is de uitkomst van je query leeg. Mis ook elke foutafhandeling van je query. Klopt die wel??
Zet error reporting aan.
De query die klopt wel deze heb ik door phpmyadmin gehaalt.
Ik krijg nu deze melding:
Code (php)
1
2
2
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 'USING (id)' at line 17
Query: SELECT ts.id, ts.ts_titel, ts.poll, ts.weeknr, ts.jaar, ts_optie.ts_id, ts_optie.artiest, ts_optie.titel, ts_optie.cover FROM ts INNER JOIN ts_optie ON ts.id = ts_optie.ts_id USING (id)
Query: SELECT ts.id, ts.ts_titel, ts.poll, ts.weeknr, ts.jaar, ts_optie.ts_id, ts_optie.artiest, ts_optie.titel, ts_optie.cover FROM ts INNER JOIN ts_optie ON ts.id = ts_optie.ts_id USING (id)
Ik zie echt het probleem niet ivm de USING (id)
Dit is complete code met afhandeling
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
define( 'DEBUG_MODE', true );
include ("config.php");
$query = " SELECT
ts.id,
ts.ts_titel,
ts.poll,
ts.weeknr,
ts.jaar,
ts_optie.ts_id,
ts_optie.artiest,
ts_optie.titel,
ts_optie.cover
FROM
ts
INNER JOIN
ts_optie
ON
ts.id = ts_optie.ts_id
USING (id)";
$result = mysql_query( $query );
if ( false === $result )
{
echo '<p>Er is iets fout gegaan bij ophalen van de gegevens.<br />';
if ( constant( 'DEBUG_MODE' ) )
{
echo '<br />Foutmelding: ' . mysql_error() . '
<br />Query: ' . htmlspecialchars( $query );
}
echo '</p>';
}
else
{
// Hulpvariabelen voor Tabellen maken
$aantal_kolommen = 2;
$kolom_breedte = 343; // in pixels
$huidige_kolom = 0; // als deze variabele de waarde 0 heeft dan is er een rij afgelopen en moet er een nieuwe beginnen
$html = '';
$cur_id = 0;
if(mysql_num_rows($result) > 0)
{
while ($row = mysql_fetch_array($result))
{
if ($row['ts_id'] != $cur_id)
{
if ($cur_id > 0) {
$html .= "</table>";
}
$cur_id = $row['ts_id'];
$html .= '<tr><td colspan="'.$aantal_kolommen.'">' .
$row['ts_titel'] . '</td></tr>';
$huidigekolom = 0;
}
} // end of while()
// fix voor de laatste rij - was een rij volledig gevuld ?
if($huidige_kolom != 0)
{
// rij was nog niet vol(ledig) - vul de resterende cellen op met "stuffing"
for($i = $huidige_kolom; $i < $aantal_kolommen; $i++)
{
// in plaats van kun je de cel ook met iets anders vullen natuurlijk
echo '<td width='.$kolom_breedte.'> </td>';
}
// sluit tenslotte de rij alsnog af
echo '</tr>';
}
} // Einde if om te kijken of er rows bestaan.
else
{
echo '
Er is geen result beschikbaar.';
} // Einde else voor als er geen Rows bestaan
} // end of else
echo '</table>';
?>
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);
define( 'DEBUG_MODE', true );
include ("config.php");
$query = " SELECT
ts.id,
ts.ts_titel,
ts.poll,
ts.weeknr,
ts.jaar,
ts_optie.ts_id,
ts_optie.artiest,
ts_optie.titel,
ts_optie.cover
FROM
ts
INNER JOIN
ts_optie
ON
ts.id = ts_optie.ts_id
USING (id)";
$result = mysql_query( $query );
if ( false === $result )
{
echo '<p>Er is iets fout gegaan bij ophalen van de gegevens.<br />';
if ( constant( 'DEBUG_MODE' ) )
{
echo '<br />Foutmelding: ' . mysql_error() . '
<br />Query: ' . htmlspecialchars( $query );
}
echo '</p>';
}
else
{
// Hulpvariabelen voor Tabellen maken
$aantal_kolommen = 2;
$kolom_breedte = 343; // in pixels
$huidige_kolom = 0; // als deze variabele de waarde 0 heeft dan is er een rij afgelopen en moet er een nieuwe beginnen
$html = '';
$cur_id = 0;
if(mysql_num_rows($result) > 0)
{
while ($row = mysql_fetch_array($result))
{
if ($row['ts_id'] != $cur_id)
{
if ($cur_id > 0) {
$html .= "</table>";
}
$cur_id = $row['ts_id'];
$html .= '<tr><td colspan="'.$aantal_kolommen.'">' .
$row['ts_titel'] . '</td></tr>';
$huidigekolom = 0;
}
} // end of while()
// fix voor de laatste rij - was een rij volledig gevuld ?
if($huidige_kolom != 0)
{
// rij was nog niet vol(ledig) - vul de resterende cellen op met "stuffing"
for($i = $huidige_kolom; $i < $aantal_kolommen; $i++)
{
// in plaats van kun je de cel ook met iets anders vullen natuurlijk
echo '<td width='.$kolom_breedte.'> </td>';
}
// sluit tenslotte de rij alsnog af
echo '</tr>';
}
} // Einde if om te kijken of er rows bestaan.
else
{
echo '
Er is geen result beschikbaar.';
} // Einde else voor als er geen Rows bestaan
} // end of else
echo '</table>';
?>
Het is JOIN ... ON of JOIN ... USING, niet allebei
Misschien een LIMIT plaatsen?
@ Dem , Een limit is wel een oplossing. Dan krijg ik ook de goede waarders uit mijn query. Maar ik vind dat niet de oplossing. Omdat ik gewoon 1 poll uit de query wil hebben met daarbij uit de andere table de tracks die er bij horen.
Ik mag aannemen dat dit ook gewoon wil werken met deze query. En een limit zal alleen handig zijn op de polls die er uit komen maar niet op de tracks die er uit komen.
Als je een LIMIT gebruikt geldt die voor de complete query.
Alleen vroeg ik mij nog 1 ding af eigenlijk.
Ik krijg nu de result die ik hebben wil door middel van een LIMIT 6.
Deze 6 komt voort uit de 6 results in table ts_optie.
Alleen nu kan het soms voorkomen dat er 1 week bijvoorbeeld maar 5 zijn, dan zal hij 1 optie er bij pakken van een vorige week. Dit is natuurlijk niet de bedoeling.
Tevens als er 1 week zal komen waar de beheerder 7 of 8 optie's heeft. Dan zal er 2 niet worden weer gegeven. Nu vroeg ik mij af of er een mogelijkheid was met de onderstande code om dit probleem op te vangen?
Kort omschreven: mysql table ts heeft 1 week lijst. In Mysql table ts_optie kunnen er gevarieerd tussen de 3 en 9 results zitten die horen bij de week lijst in table ts. Nu wil ik alle ts_optie result tonen die alleen bij de ts id horen en dit als het kan zonder LIMIT gebruiken.
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<?php
include ("config.php");
$query =" SELECT
ts.id,
ts.ts_titel,
ts.poll,
ts_optie.artiest,
ts_optie.titel,
ts_optie.cover
FROM
ts
INNER JOIN
ts_optie
ON
ts.id = ts_optie.ts_id
ORDER BY
ts_optie.id
DESC
LIMIT 6
";
$result = mysql_query( $query );
// Zie: http://www.pfz.nl/wiki/mysql-foutafhandeling-in-php/
if ( false === $result )
{
echo '<p>Er is iets fout gegaan bij het ophalen van de Stemlijst gegevens.<br />';
if ('DEBUG_MODE')
{
echo '<br />Foutmelding: ' . mysql_error() . '
<br />Query: ' . htmlspecialchars( $query );
}
echo '</p>';
}
else
{
echo '
<table border="1">
<tr>';
$i=1;
while($row = mysql_fetch_assoc($result))
{
if($i == 1)
{
// print de kop met je type en weeknr
echo ' <td align="left">
' . htmlspecialchars( $row['ts_titel'] ) . '
</td>
</tr>';
} // end of if{}
// print het blok met de keuzeoptie. Waarbij je $i kunt gebruiken voor de juiste keuze:
echo ' <tr>
<td align="left">
<p>'.htmlspecialchars( $row['artiest']).' - '.htmlspecialchars( $row['titel']).'</p>
</td>
</tr>';
//hoog de $i op voor het volgende record
$i++;
} // end of While()
echo '</table>';
} // ens of else()
?>
include ("config.php");
$query =" SELECT
ts.id,
ts.ts_titel,
ts.poll,
ts_optie.artiest,
ts_optie.titel,
ts_optie.cover
FROM
ts
INNER JOIN
ts_optie
ON
ts.id = ts_optie.ts_id
ORDER BY
ts_optie.id
DESC
LIMIT 6
";
$result = mysql_query( $query );
// Zie: http://www.pfz.nl/wiki/mysql-foutafhandeling-in-php/
if ( false === $result )
{
echo '<p>Er is iets fout gegaan bij het ophalen van de Stemlijst gegevens.<br />';
if ('DEBUG_MODE')
{
echo '<br />Foutmelding: ' . mysql_error() . '
<br />Query: ' . htmlspecialchars( $query );
}
echo '</p>';
}
else
{
echo '
<table border="1">
<tr>';
$i=1;
while($row = mysql_fetch_assoc($result))
{
if($i == 1)
{
// print de kop met je type en weeknr
echo ' <td align="left">
' . htmlspecialchars( $row['ts_titel'] ) . '
</td>
</tr>';
} // end of if{}
// print het blok met de keuzeoptie. Waarbij je $i kunt gebruiken voor de juiste keuze:
echo ' <tr>
<td align="left">
<p>'.htmlspecialchars( $row['artiest']).' - '.htmlspecialchars( $row['titel']).'</p>
</td>
</tr>';
//hoog de $i op voor het volgende record
$i++;
} // end of While()
echo '</table>';
} // ens of else()
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
SELECT aka.id,
aka.ts_titel,
aka.poll
ts_optie.artiest,
ts_optie.titel,
ts_optie.cover
FROM
(SELECT id, ts_titel, poll FROM ts ORDER BY id DESC LIMIT 1) AS aka
JOIN
ts_optie ON aka.id = ts_optie.ts_id
aka.ts_titel,
aka.poll
ts_optie.artiest,
ts_optie.titel,
ts_optie.cover
FROM
(SELECT id, ts_titel, poll FROM ts ORDER BY id DESC LIMIT 1) AS aka
JOIN
ts_optie ON aka.id = ts_optie.ts_id
Gewijzigd op 30/03/2012 20:36:24 door Ger van Steenderen
Ik heb hem nog niet getest ivm ik een vraagje heb er over.
Ik zie:
aka.id,
aka.ts_titel
enz....
Wat doet deze aka. nu eigenlijk? Want deze snap ik namelijk even niet?
Verder ga ik vanavond even deze code proberen.
Een subquery in de FROM moet je altijd een alias geven omdat het eigenlijk een virtuele tabel is, aka mag je dus beschouwen als naam van de tabel.