$sql = mysqli_query($DBD->conn(),"SELECT count(id) as total FROM producten WHERE merk = 'Sony' ");
$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?
Jazeker, met de juiste database, daarom, vind ik het ook zo vreemd, hij komt terug met meer dan het totaal aantal rows in de betreffende tabel.
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
[size=xsmall]Toevoeging op 14/11/2019 13:26:35:[/size]
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
[size=xsmall]Toevoeging op 14/11/2019 13:41:53:[/size]
Als ik dit doe
$sql= "SELECT count(*) from prijzen";
$result=mysqli_query($DBD->conn(),$sql);
$row=mysqli_fetch_array($result);
$count = $row[0];
Dan doet hi het wel goed
[size=xsmall]Toevoeging op 14/11/2019 14:03:15:[/size]
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?
EXPLAIN SELECT COUNT(DISTINCT id) AS total FROM producten
geeft dus 23 miljoen producten, terwijl er maar 11 miljoen (11183381 ) zijn
1
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.
In je output van je EXPLAIN heb je 11183381 staan. Dus dat snapt ie wel.
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,
EXPLAIN SELECT COUNT(merk) AS total FROM producten WHERE merk = 'Sony';