Query levert maar 1 record.
Pagina: « vorige 1 2 3 volgende »
Die hele if-statement (lijn 20) is niet nodig omdat je al je resource hebt uit $Result
(en let eens op die hoofdletters!)
Kunnen dat meerdere landen zijn? Je haalt er nu namelijk maar 1 op.
Daarbij, dit zou je ook in de hoofdquery er direct bij kunnen zoeken.
(Maar waar komt $riderNF vandaan?)
Een query in een lus maakt je pagina doorgaans niet echt sneller
Probeer daarom altijd te kijken of je dat in een JOIN kan verwerken.
Ivo P op 20/07/2017 12:33:22:
Je zoekt nu achteraf het land/ de landen bij een ruiter.
Kunnen dat meerdere landen zijn? Je haalt er nu namelijk maar 1 op.
Kunnen dat meerdere landen zijn? Je haalt er nu namelijk maar 1 op.
Voor het eerste land werkte dat, maar ik heb het iets aangepast
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
<?php
if($riderNF != $Row['competing_for_country']) {
$sqlCountry = "SELECT e_country FROM country WHERE ISO_A3 = '".$Row['competing_for_country']."'";
if (!(@ $resultCountry = mysqli_query($dblink, $sqlCountry))) {
$html = 'There was an error running your query: '.mysqli_error($dblink);
$pdf->writeHTML($html, true, false, true, false, ' ');
}
$country_name = mysqli_fetch_assoc($resultCountry);
$html .= $Row['competing_for_country']. "<br />";
$riderNF = $country_name;
}
?>
if($riderNF != $Row['competing_for_country']) {
$sqlCountry = "SELECT e_country FROM country WHERE ISO_A3 = '".$Row['competing_for_country']."'";
if (!(@ $resultCountry = mysqli_query($dblink, $sqlCountry))) {
$html = 'There was an error running your query: '.mysqli_error($dblink);
$pdf->writeHTML($html, true, false, true, false, ' ');
}
$country_name = mysqli_fetch_assoc($resultCountry);
$html .= $Row['competing_for_country']. "<br />";
$riderNF = $country_name;
}
?>
Er kunnen meerdere land voorkomen. Deze staan in $result op volgorde door de order in de query
opm. $sqlCountry bevat de voledig landsnaam in officieele schrijfwijze aan de hand van de ISI_A3 landen code.
Gewijzigd op 20/07/2017 14:00:51 door Harry H Arends
Die opmerking van Ariën over hoofdletters geldt overigens niet alleen voor $Result, maar ook voor $Row. En eigenlijk voor je gehele code...
Willem vp op 20/07/2017 15:36:18:
Die opmerking van Ariën over hoofdletters geldt overigens niet alleen voor $Result, maar ook voor $Row. En eigenlijk voor je gehele code...
Vanmiddag eerst maar even het hoofd leeg gemaakt en toen alles met de kam bekeken en dit is het resultaat:
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
// Vul hier een rapport specifiek clausule in.
// In dit rapport gaat het om welke combinaties hebben een onderkomen in de caravan nodig
$sqlCombiWHERE = " WHERE 2010Combination.accomGroom = 'YES' ";
$report = $_GET['report'];
$sqlCombiBASIC = "
SELECT person.*, horse.*, 2010Combination.*
FROM FEIPerson AS person
INNER
JOIN 2010Combination ON person.fei_id = 2010Combination.personFEIid
INNER
JOIN FEIHorse horse ON horse.fei_id = 2010Combination.horseFEIid ";
$sqlCombiORDER = "
ORDER
BY person.competing_for_country, 2010Combination.compNumber ASC ";
$sqlCombination = $sqlCombiBASIC . $sqlCombiWHERE . $sqlCombiORDER;
if(!$Result = mysqli_query($dblink, $sqlCombination)) {
$html = "There is een error opening table for ". $report. "; ".mysqli_error($dblink)."<br />";
$html .= "<br />=========================<br />";
$html .= $sqlCombination ; // for debug only
} else {
$EV_Year = date('Y') . "<br />";
$numberCombinations = mysqli_affected_rows($dblink);
//$Result = mysqli_query($dblink, $sqlCombination);
$html .= $EV_Year;
$html .= "<br />=========================<br />";
/* fetch associative array */
while ($Row= mysqli_fetch_assoc($Result)) {
$html .= $Row["fei_id"] . " - ";
$html .= $Row["competing_for_country"] . " - ";
$html .= $Row["first_name"] . " ";
$html .= $Row["family_name"] . " -> ";
$html .= $Row["groups"] . " - ";
$html .= $Row["e_country"] ;
$html .= "<br />";
// $html .= $numberCombinations . "<br />";
}
$html .= "<br />=========================<br />";
$html .= "Query: ". $sqlCombination . "<br />";
$html .= "Aantal Groom in caravn: ". $numberCombinations . "<br />";
$Result = mysqli_query($dblink, $sqlCombination);
$html .= "Aantal Vrouwlijk: ". $numFemale . "<br />";
$html .= "Aantal Manlijk: ". $numMale . "<br />";
$html .= "<br />=========================<br />";
if($riderNF != $Row['competing_for_country']) {
$sqlCountry = "SELECT e_country FROM country WHERE ISO_A3 = '".$Row['competing_for_country']."'";
if (!(@ $resultCountry = mysqli_query($dblink, $sqlCountry))) {
$html = 'There was an error running your query: '.mysqli_error($dblink);
$pdf->writeHTML($html, true, false, true, false, ' ');
}
$country_name = mysqli_fetch_assoc($resultCountry);
$html .= $Row['competing_for_country']. "<br />";
$riderNF = $country_name;
}
// Maak een pagina voor ieder land in de lijst
// }
}
?>
// Vul hier een rapport specifiek clausule in.
// In dit rapport gaat het om welke combinaties hebben een onderkomen in de caravan nodig
$sqlCombiWHERE = " WHERE 2010Combination.accomGroom = 'YES' ";
$report = $_GET['report'];
$sqlCombiBASIC = "
SELECT person.*, horse.*, 2010Combination.*
FROM FEIPerson AS person
INNER
JOIN 2010Combination ON person.fei_id = 2010Combination.personFEIid
INNER
JOIN FEIHorse horse ON horse.fei_id = 2010Combination.horseFEIid ";
$sqlCombiORDER = "
ORDER
BY person.competing_for_country, 2010Combination.compNumber ASC ";
$sqlCombination = $sqlCombiBASIC . $sqlCombiWHERE . $sqlCombiORDER;
if(!$Result = mysqli_query($dblink, $sqlCombination)) {
$html = "There is een error opening table for ". $report. "; ".mysqli_error($dblink)."<br />";
$html .= "<br />=========================<br />";
$html .= $sqlCombination ; // for debug only
} else {
$EV_Year = date('Y') . "<br />";
$numberCombinations = mysqli_affected_rows($dblink);
//$Result = mysqli_query($dblink, $sqlCombination);
$html .= $EV_Year;
$html .= "<br />=========================<br />";
/* fetch associative array */
while ($Row= mysqli_fetch_assoc($Result)) {
$html .= $Row["fei_id"] . " - ";
$html .= $Row["competing_for_country"] . " - ";
$html .= $Row["first_name"] . " ";
$html .= $Row["family_name"] . " -> ";
$html .= $Row["groups"] . " - ";
$html .= $Row["e_country"] ;
$html .= "<br />";
// $html .= $numberCombinations . "<br />";
}
$html .= "<br />=========================<br />";
$html .= "Query: ". $sqlCombination . "<br />";
$html .= "Aantal Groom in caravn: ". $numberCombinations . "<br />";
$Result = mysqli_query($dblink, $sqlCombination);
$html .= "Aantal Vrouwlijk: ". $numFemale . "<br />";
$html .= "Aantal Manlijk: ". $numMale . "<br />";
$html .= "<br />=========================<br />";
if($riderNF != $Row['competing_for_country']) {
$sqlCountry = "SELECT e_country FROM country WHERE ISO_A3 = '".$Row['competing_for_country']."'";
if (!(@ $resultCountry = mysqli_query($dblink, $sqlCountry))) {
$html = 'There was an error running your query: '.mysqli_error($dblink);
$pdf->writeHTML($html, true, false, true, false, ' ');
}
$country_name = mysqli_fetch_assoc($resultCountry);
$html .= $Row['competing_for_country']. "<br />";
$riderNF = $country_name;
}
// Maak een pagina voor ieder land in de lijst
// }
}
?>
De pagina zelf is hier te vinden.
Nog steeds draai je een query voor het land apart. Waarom eigenlijk? Dit moet je gewoon bij de hoofdquery joinen. Daarbij is de logica voor het uitvoeren van de query een beetje wazig, en wordt dit maar half doorgevoerd.
Ben van Velzen op 20/07/2017 21:19:46:
Nog steeds draai je een query voor het land apart. Waarom eigenlijk? Dit moet je gewoon bij de hoofdquery joinen. Daarbij is de logica voor het uitvoeren van de query een beetje wazig, en wordt dit maar half doorgevoerd.
Kun jij mij dan precies uitleggen hoe ik dat in de hoofd query inpas.
Ik heb nanelijk geen idee hoe dat vorm moet krijgen.??
Uit welke tabel komt competing_for_country? Pas dan kan ik daar wat zinnigs van maken.
deze waarde staat in person.competing_for_country en de landen staan in de tabel country
Code (php)
1
2
3
4
5
2
3
4
5
SELECT person.*, horse.*, 2010Combination.*, country.e_country
FROM FEIPerson AS person
JOIN 2010Combination ON person.fei_id = 2010Combination.personFEIid
JOIN FEIHorse horse ON horse.fei_id = 2010Combination.horseFEIid
JOIN country ON country.ISO_A3 = person.competing_for_country
FROM FEIPerson AS person
JOIN 2010Combination ON person.fei_id = 2010Combination.personFEIid
JOIN FEIHorse horse ON horse.fei_id = 2010Combination.horseFEIid
JOIN country ON country.ISO_A3 = person.competing_for_country
Houd er ook even rekening mee dat je de query op regel 44 nog een keer uitvoert. Waarom eigenlijk?
Ben van Velzen op 21/07/2017 17:21:05:
Dan zou de query dus als start op iets uitkomen als:
Werkt prima, getest in php[myadmin
Maar ik zie dat je de beide INNER's hebt weggelaten??
Ben van Velzen op 21/07/2017 17:21:05:
Houd er ook even rekening mee dat je de query op regel 44 nog een keer uitvoert. Waarom eigenlijk?
Omdat ik het aantal vrouwelijke verzorgers moet weten die een caravan nodig hebben
Correct. Die hoef je niet te noemen. Net als bij LEFT JOIN, wat een LEFT OUTER JOIN is.
>> Omdat ik het aantal vrouwelijke verzorgers moet weten die een caravan nodig hebben
Waarom voer je dan DEZELFDE query opnieuw uit?
Ben van Velzen op 21/07/2017 19:05:36:
>> Omdat ik het aantal vrouwelijke verzorgers moet weten die een caravan nodig hebben
Waarom voer je dan DEZELFDE query opnieuw uit?
Waarom voer je dan DEZELFDE query opnieuw uit?
Kan ik die dan ook uit het eerdere resultaat halen?? zoja wat is het mechanischme hiervoor dan??
Gewijzigd op 21/07/2017 20:09:23 door - Ariën -
- Ariën - op 21/07/2017 20:09:03:
Die regel kan je gewoon verwijderen. Als je in je query wilt filteren, dan kan je met $_GET je query aanpassen. Denk wel aan escaping, of gebruik vaste waardes die je vooraf controleert.
Dit werkt toch alleen maar met $Row en niet met $Result.
Hoe tel je dan met $_GET
script.php?geslacht=vrouw&verblijf=caravan
Dan verwerk je dus die waardes in je query.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
// -----------------------------------------------------------+
// Verkrijg aantal vrouwelijke verzorgers (Groom)
if($Row["genderGroom"] == 'Female') $numFemale++;
//Doe dit ook voor mannelijke groom's
elseif($Row["genderGroom"] == 'Male') $numMale++;
// -----------------------------------------------------------+
// Verkrijg aantal vrouwelijke verzorgers (Groom)
if($Row["genderGroom"] == 'Female') $numFemale++;
//Doe dit ook voor mannelijke groom's
elseif($Row["genderGroom"] == 'Male') $numMale++;
// -----------------------------------------------------------+
Dit is de code die ik op dit moment heb:
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
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
<?php
// Vul hier een rapport specifiek clausule in.
// In dit rapport gaat het om welke combinaties hebben een onderkomen in de caravan nodig
$sqlCombiWHERE = " WHERE 2010Combination.accomGroom = 'YES' ";
// +-----Table header --------------------------------------------------------+
$tbl = '<table cellspacing="0" cellpadding="0" border="1" width="100%">
<tr>
<th width="30"> </th>
<th width="50">Caravan</th>
<th width="200">Name</th>
<th width="150">Telefoon</th>
<th width="145">Horse</th>
<th width="">Country</th>
</tr> ';
// </table>';
$previousCountry = " ";
$report = $_GET['report'];
$sqlCombiBASIC = "
SELECT person.*, horse.*, 2010Combination.*, country.* , country.*
FROM FEIPerson AS person
JOIN 2010Combination ON person.fei_id = 2010Combination.personFEIid
JOIN FEIHorse horse ON horse.fei_id = 2010Combination.horseFEIid
JOIN country ON country.ISO_A3 = person.competing_for_country ";
$sqlCombiORDER = "
ORDER BY person.competing_for_country, 2010Combination.compNumber ASC ";
$sqlCombination = $sqlCombiBASIC . $sqlCombiWHERE . $sqlCombiORDER;
if(!$Result = mysqli_query($dblink, $sqlCombination)) {
$html = "There is een error opening table for ". $report. "; ".mysqli_error($dblink)."<br />";
$html .= "<br />=========================<br />";
} else { // database is aanwezig en geopend
$numFemale = $numMale = 0;
$EV_Year = date('Y') . "<br />";
$numberCombinations = mysqli_affected_rows($dblink);
$html .= $EV_Year;
$html = "<br />=========================<br />";
/* fetch associative array */
while ($Row= mysqli_fetch_assoc($Result)) {
$tbl .= ' <tr>
<td>'.$Row["compNumber"].'</td>
<td>'.$Row["caravanNumber"].'</td>
<td>'.$Row["nameGroom"].'</td>
<td>+'.$Row["cellGroom"].'</td>
<td>'.$Row["current_name"].'</td>
<td>'.$Row["competing_for_country"].'</td>
</tr>';
// -----------------------------------------------------------+
// Verkrijg aantal vrouwelijke verzorgers (Groom)
if($Row["genderGroom"] == 'Female') $numFemale++;
//Doe dit ook voor mannelijke groom's
elseif($Row["genderGroom"] == 'Male') $numMale++;
// -----------------------------------------------------------+
if($previousCountry!=$Row["competing_for_country"]) {
$previousCountry=$Row["competing_for_country"];
// add a page
$pdf->AddPage('P', 'A4');
// -----------------------------------------------------------+
$pdf->writeHTML($tbl, true, false, true, false, ' ');
// -----------------------------------------------------------+
} else { $previousCountry=$Row["competing_for_country"];}
} // end while
} // end
// Maak een pagina voor totalen
$sql = "<br />=========================<br />";
$sql .= "Aantal Groom in caravan: ". $numberCombinations . "<br />";
$sql .= "Aantal Vrouwlijk: ". $numFemale . "<br />";
$sql .= "Aantal Manlijk: ". $numMale . "<br />";
$sql .= "<br />=========================<br />";
// add a page
$pdf->AddPage('P', 'A4');
// -----------------------------------------------------------+
$pdf->writeHTML($sql, true, false, true, false, ' ');
// -----------------------------------------------------------+
?>
// Vul hier een rapport specifiek clausule in.
// In dit rapport gaat het om welke combinaties hebben een onderkomen in de caravan nodig
$sqlCombiWHERE = " WHERE 2010Combination.accomGroom = 'YES' ";
// +-----Table header --------------------------------------------------------+
$tbl = '<table cellspacing="0" cellpadding="0" border="1" width="100%">
<tr>
<th width="30"> </th>
<th width="50">Caravan</th>
<th width="200">Name</th>
<th width="150">Telefoon</th>
<th width="145">Horse</th>
<th width="">Country</th>
</tr> ';
// </table>';
$previousCountry = " ";
$report = $_GET['report'];
$sqlCombiBASIC = "
SELECT person.*, horse.*, 2010Combination.*, country.* , country.*
FROM FEIPerson AS person
JOIN 2010Combination ON person.fei_id = 2010Combination.personFEIid
JOIN FEIHorse horse ON horse.fei_id = 2010Combination.horseFEIid
JOIN country ON country.ISO_A3 = person.competing_for_country ";
$sqlCombiORDER = "
ORDER BY person.competing_for_country, 2010Combination.compNumber ASC ";
$sqlCombination = $sqlCombiBASIC . $sqlCombiWHERE . $sqlCombiORDER;
if(!$Result = mysqli_query($dblink, $sqlCombination)) {
$html = "There is een error opening table for ". $report. "; ".mysqli_error($dblink)."<br />";
$html .= "<br />=========================<br />";
} else { // database is aanwezig en geopend
$numFemale = $numMale = 0;
$EV_Year = date('Y') . "<br />";
$numberCombinations = mysqli_affected_rows($dblink);
$html .= $EV_Year;
$html = "<br />=========================<br />";
/* fetch associative array */
while ($Row= mysqli_fetch_assoc($Result)) {
$tbl .= ' <tr>
<td>'.$Row["compNumber"].'</td>
<td>'.$Row["caravanNumber"].'</td>
<td>'.$Row["nameGroom"].'</td>
<td>+'.$Row["cellGroom"].'</td>
<td>'.$Row["current_name"].'</td>
<td>'.$Row["competing_for_country"].'</td>
</tr>';
// -----------------------------------------------------------+
// Verkrijg aantal vrouwelijke verzorgers (Groom)
if($Row["genderGroom"] == 'Female') $numFemale++;
//Doe dit ook voor mannelijke groom's
elseif($Row["genderGroom"] == 'Male') $numMale++;
// -----------------------------------------------------------+
if($previousCountry!=$Row["competing_for_country"]) {
$previousCountry=$Row["competing_for_country"];
// add a page
$pdf->AddPage('P', 'A4');
// -----------------------------------------------------------+
$pdf->writeHTML($tbl, true, false, true, false, ' ');
// -----------------------------------------------------------+
} else { $previousCountry=$Row["competing_for_country"];}
} // end while
} // end
// Maak een pagina voor totalen
$sql = "<br />=========================<br />";
$sql .= "Aantal Groom in caravan: ". $numberCombinations . "<br />";
$sql .= "Aantal Vrouwlijk: ". $numFemale . "<br />";
$sql .= "Aantal Manlijk: ". $numMale . "<br />";
$sql .= "<br />=========================<br />";
// add a page
$pdf->AddPage('P', 'A4');
// -----------------------------------------------------------+
$pdf->writeHTML($sql, true, false, true, false, ' ');
// -----------------------------------------------------------+
?>
Er is echter nog één probleem; In de while controleer ik of een volgend land aan de beurt is deze moet starten op een nieuwe pagina, echter wordt het nieuwe land (regel) nog op de pagina van het vorige land geplaatst. De output van de link is waarschijnlijk duidelijker dan mijn uitleg.
Hoe zou ik dit beter kunnen doen??
Gewijzigd op 22/07/2017 18:53:43 door Harry H Arends