Jump to content
php.lv forumi

Recommended Posts

Posted

<?php include "_inc_/config.php"; 
$result = mysql_query('SELECT COUNT(*) FROM lietotaji');
while($row = mysql_fetch_array($result))
{
echo "COUNT(*)";
} ?>

 

Kā tur īsti vajadzēja izvilkt ārā to skaitli?

 

Nepieciešams lai būtu

 

Kopā reģistrējušies: tas_skaitlis

Posted

kas izpildās ātrāk?

skaits = 0;
$result = mysql_query('SELECT COUNT(*) FROM lietotaji');
while($row = mysql_fetch_array($result))
{
skaits++;
}

 

vai

 

list($count) = mysql_fetch_row($result);

Posted

ray - tie abi divi koda gabali tev dara divas dažādas lietas. Un tādā gadījumā salīdzināt ātrumus ir neloģiski.

Posted

ja sapratu pareizi jautājuma jēgu, tad sanāk šādi:

<?php include "_inc_/config.php";
$result = mysql_query('SELECT COUNT(*) AS c FROM lietotaji');
while($row = mysql_fetch_array($result))
{
echo $row['c'];
} ?>

Posted

Nesapratu īsti. Ja izmanto GROUP BY, tad tieši vajadzētu while, lai dabūtu visus COUNT rezultātus. Ja nav GROUP BY, tad atgriezsts tiks tikai viens rezultāts un tam while nevajag.

Posted (edited)

Nu, kā uz to paskatās.

Visoptimālākais kods - bez koda.

Bet ja nopietni, ja lapai onlainā 500 useri un 100 000 reģistrēti, tad protams. Ja kāds reizi nedēļā ielien un 100 reģistrēti, tad nav svarīgi.

 

Pirmajam gadījumam es taisu cronā ģenerētu PHP inklūdi $TOTAL_USERS = x; ja baigi vajag to lapā rādīt.

 

Viss ir relatīvi ;)

 

Bet ja strikti - ok, SELECT COUNT(id) FROM table būs ātrāk, jo tajā gadījumā netiek skaitīti visi ieraksti, bet mysql vēršas pie indeksa.

Edited by NiTrino
Posted

Ja id ir pirmārā atslēga, tad defaultajam MyISAM tabulas tipam (nezinu kā citiem, InnoDB toč tā nav) MySQL vispār nevēršas ne pie kāda indeksa, bet vienkārši atdod skaitli ar ierakstu skaitu. Šis skaitlis glabājas atsevišķi - iznāk, ka nevajag skriet cauri nekādiem tabulas ierakstiem. Tas nozīmē, ka darbības sarežģītība ir O(1) - konstante. Taču tavā SELECT id FROM ... gadījumā sarežģītība ir lineāra - O(n), jo nākas skriet cauri visiem tabulas ierakstiem.

×
×
  • Create New...