Chyba při table()->count()

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
vymak
Člen | 92
+
0
-

Ahoj, narazil jsem na zajímavý problém.

Potřebuji z jedné tabulky zjistit počet záznamů. Počet záznamů v tabulce je zhruba 4 000 000.
Pokud ale zavolám dotaz:

	$this->db->table('VersionData')->count();

Dostanu chybu:

Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 24 bytes) in C:\dev\localhost_www\vendor\nette\database\src\Database\ResultSet.php on line 160

Když ale použiju alternativní dotaz tak vše funguje bez problémů.

	$this->db->query('SELECT COUNT(*) FROM VersionData')->fetch();

Jen pro upřesnění používám databázový server Microsoft SQL Server 2012 a PHP 5.5.22, Apache 2.4.12.
Čím to může být?? Je to bug nebo jen chyba u mě?

EDIT:
Verze Nette 2.3.0

Editoval vymak (10. 3. 2015 20:58)

greeny
Člen | 405
+
+3
-

You should do ->count("id"), since then Nette runs
SELECT COUNT("id") FROM table.

With yous solution Nette runs SELECT * FROM table and counts it internally in php (memory error :) )

See API

vymak
Člen | 92
+
0
-

Thanks for solution, it works perfect.

Other problem is I can´t specify column, because this method is part of other method which check counts from others table. And every table doesn´t containts column id.

Something as:

	foreach ($tables as $table) {
		$count = $this->db->table($table)->count();
	}

I hope you understand me :D My english is not good :D

Editoval vymak (10. 3. 2015 21:27)

David Matějka
Moderator | 6445
+
+2
-

@vymak pouzij

->count('*')
vymak
Člen | 92
+
0
-

@DavidMatějka díky to je přesně ta odpověď co jsem potřeboval :) :)

LuBoss
Člen | 21
+
0
-

Narazil jsem na stejný problém – při volání Nette\Database\Table\Selection $sel->count() docházelo k chybám. Ale ne pokaždé, což bylo divné. Stačilo změnit ->count() na ->count('*') což je nakonec i logické.

Editoval LuBoss (16. 7. 2015 12:27)