Binnen mijn script gebruik ik deze sql opdracht om alle regels uit een tabel te lezen.

<?php
$sqlCombination = "
	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 
	GROUP 
			BY 2010Combination.personFEIid
	ORDER 
			BY person.competing_for_country, 2010Combination.compNumber ASC";
?>

En dit is het stukje script dat ik gebruik om o.a. het aantal regels te weten te komen:

<?php
$Result = mysqli_query($dblink, $sqlCombination);
if(!$Result) {
	$html = 'There is een error opening table for listing Combinations; '.mysqli_error();
	$pdf->writeHTML($html, true, false, true, false, ' ');
	}
$numberCombination = mysqli_affected_rows($dblink);
?>

In $numberCombination komt dan het aantal regels te staan, echter deze waarde is foutief.
Kijkend met PHPMYADMIN op de webserver staan in de tabel 3 regels terwijl de waarde in $numberCombination 1 is.
Waar kan dit verschil vandaan komen aangezien ik geen enkele WHERE clausule in de sql opdracht heb staan.

Harry
Dan zou de query dus als start op iets uitkomen als:

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		


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

2010Combination.accomGroom = 'YES' AND 2010Combination.genderGroom = 'Male'


>> Maar ik zie dat je de beide INNER's hebt weggelaten??
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?

Kan ik die dan ook uit het eerdere resultaat halen?? zoja wat is het mechanischme hiervoor dan??

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.
- 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

Je bouwt je query dynamisch op met waardes in parameters uit je URL.

script.php?geslacht=vrouw&verblijf=caravan
Dan verwerk je dus die waardes in je query.
Ik heb het MYSQLI deel er uit gemieterd en vervangegn door:

// -----------------------------------------------------------+
// Verkrijg aantal vrouwelijke verzorgers (Groom)
        if($Row["genderGroom"] == 'Female')  $numFemale++;
//Doe dit ook voor mannelijke groom's
        elseif($Row["genderGroom"] == 'Male')  $numMale++;
// -----------------------------------------------------------+

Lijkt me inderdaad wel zo handig. Eerder had je zelfs helemaal geen code die $numFemale en $numMale bepalen. Het kan nog wel verstandig zijn om voor de lus even iets te doen als
<?php
$numFemale = 0;
$numMale = 0;
?>
LS,

Dit is de code die ik op dit moment heb:

<?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, ' ');
// -----------------------------------------------------------+

?>
en is te vinden op deze link
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??

Reageren