Door
Perry Hofland
op 03-11-2012 10:17
gewijzigd op 03-11-2012 10:17
1.113 views
Hallo forum lezers,
Ik heb een probleempje.
Ik heb een soort boeking systeem, en ik zou op de website graag willen laten zien hoeveel deelnemers er op dit moment nu zijn. Dit werkt, hier heb ik dit voor gebruikt:
<?php
$event_id = 9; // of intval($_GET['event_id']) of zo
$result = mysql_query("
SELECT COUNT(iets) AS aantal
FROM wp_em_bookings
WHERE event_id = '".$event_id."'
ORDER BY event_date DESC");
$result = mysql_fetch_assoc($result);
$aantal = $result['aantal'];
?>
Let even op dat je beter geen * gebruikt, maar gewoon even de kolomnamen die je echt nodig hebt typt.
Dat is op dit niveau nog niet nodig, maar later gaat het problemen voorkomen.
Plus dat je in de PHP-code kan zien welke kolommen er verwacht worden (zonder even in de database te kijken) of de PHP uit te voeren.
Daarnaast, als je alleen het aantal wil, wil je niet alle ID's weten. Je wilt een aantal weten.
Waarom zou je tientallen tot miljoenen rijen met gegevens van je database willen hebben, als je alleen maar een nummer wilt weten?
In jouw opzet vraag je alle informatie op.
Dat zijn meerdere rijen met meerdere kolommen: heel veel data.
Die data gebruik je niet: je laat PHP alleen de rijen tellen.
Waarom dan SQL niet alleen het nummertje van het aantal rijen laten geven?
Je krijgt met mijn code 1 rij, 1 kolom (dus 1 veld) terug met daar het nummer. Dat is (veel) sneller dan jouw manier. En je belast de SQL-server niet zo veel.
Een paar kleine tips, maar handig voor later.
$result = mysql_query("SELECT event_id
FROM wp_em_bookings
WHERE event_id=9", $link);
if (!$result) {
die('Invalid query: ' . mysql_error()); // niet helemaal netjes, maar in ieder geval een begin.
exit;
}
$num_rows = mysql_num_rows($result);
echo $num_rows;
?>
Overigens twijfel ik of niet beter COUNT gebruikt kan worden ipv mysql_num_rows.
Obelix: wat is de functie van exit() op regel 10?
Wat doe die die() erboven denk je?
Ook jij selecteert alle ID's om ze vervolgens niet te gebruiken. Gebruik een COUNT in je query.
PHP.net geeft zeer goede antwoorden, maar in dit geval moet/kan het beter in SQL.
<?php
$event_id = 9; // of intval($_GET['event_id']) of zo
$result = mysql_query("
SELECT COUNT(iets) AS aantal
FROM wp_em_bookings
WHERE event_id = '".$event_id."'
ORDER BY event_date DESC");
$result = mysql_fetch_assoc($result);
$aantal = $result['aantal'];
?>
Volgens mij geeft dit altijd slechts één record.
Dan heeft ORDER BY geen nut en kan het weg.
[quote="Eddy Erkelens op 03/11/2012 11:15:54"]
<?php
$event_id = 9; // of intval($_GET['event_id']) of zo
$result = mysql_query("
SELECT COUNT(iets) AS aantal
FROM wp_em_bookings
WHERE event_id = '".$event_id."'
ORDER BY event_date DESC");
$result = mysql_fetch_assoc($result);
$aantal = $result['aantal'];
?>
Volgens mij geeft dit altijd slechts één record.
Dan heeft ORDER BY geen nut en kan het weg.
[/quote]
Jep, dat klopt. Had pas later die COUNT() toegevoegd.
ORDER BY heeft inderdaad totaal geen enkel nut.