count in php komt met een verkeerd resultaat
Code (php)
1
2
3
4
2
3
4
$sql = mysqli_query($DBD->conn(),"SELECT count(id) as total FROM producten WHERE merk = 'Sony' ");
$row = mysqli_fetch_array($sql);
$count = $row['total'];
$row = mysqli_fetch_array($sql);
$count = $row['total'];
Dit werkt meestal wel met andere queries waarbij de count wel goed is,maar in dit geval, telt hij 23 miloen, terwijl het resultaat rond de 4000 is.
Het punt is, dat het in phpmyadmin wel de juiste resultaat geeft.
Als ik mysqli_num_rows gebruik, dan overschrijd mijn memory limit, omdat dit om een table van 11 miljoen rijen gaat in een innoDB.
Heeft iemand een idee, hoe ik zo snel mogelijk de juiste resultaat krijg?
Alvast bedankt!
Heb je de query al in de commandline gegooid? Wat komt daar dan uit?
Zit je wel verbonden met de juiste database? (bijv. live-db versus test-db)
in phpmyadmin, danwel CLI, krijg ik de juiste data terug. Kan het zo zijn, dat de tabel te groot is en dan in de war raakt? Want dat lijkt het geval wel.
Dus een bug, HAHAHAHAH
Toevoeging op 14/11/2019 13:26:35:
Als ik nu net gewoon in PHPmyadmin de query laad:
SELECT count(*) as total FROM `prijzen` geeft hij zelfs in mhp en CLI nu als total 23 miljoen.
Maar het totaal is:
Weergave van records 0 - 24 (11183380 totaal,
Wat is er fout aan de count(*) of count (id) zelfde verhaal??? id is een primary key
Toevoeging op 14/11/2019 13:41:53:
Als ik dit doe
Code (php)
1
2
3
4
2
3
4
$sql= "SELECT count(*) from prijzen";
$result=mysqli_query($DBD->conn(),$sql);
$row=mysqli_fetch_array($result);
$count = $row[0];
$result=mysqli_query($DBD->conn(),$sql);
$row=mysqli_fetch_array($result);
$count = $row[0];
Dan doet hi het wel goed
Toevoeging op 14/11/2019 14:03:15:
Weer een update.
Dit werkt trouwens alleen als er een WHERE clause aan vast zit zoals hierboven, waar hij alle records pakt, dan pakt het laatste nog steeds 23 miljoen, dus fout., Maar de eerste code, pakt hij pet alle records wel de juiste aantal (11 miljoen) maar met wwn WHERE weer 23 miljoen.
Er is niet 1 wijze, waarop het goed blijft werken?
geeft dus 23 miljoen producten, terwijl er maar 11 miljoen (11183381 ) zijn
Quote:
1
SIMPLE
producten
range
NULL
id
4
NULL
11183381
Using index for group-by (scanning)
SIMPLE
producten
range
NULL
id
4
NULL
11183381
Using index for group-by (scanning)
id is al distinct , want het is een primary key.
Ik gebruik trouwens MariaDB 10.0.17
HEt lijkt erop dat dit wel een bug is, omdat hij in de war raakt met grote aantallen. Als ik het test met tabellen die 10 rows hebben, dan heb ik dit probleem niet.
COUNT(*) telt gewoon alle records.
COUNT(id) zou tellen alle records die NOT NULL zijn.
Count(Distinct id) zou moeten tellen die uniek zijn, zou dus alleen enkele mogen tellen.
Dus, even terug naar mijn theorie:
Als je query eens anders opbouwt,
wat geeft dat?