(SQL) count bij join van meerdere tabellen
Ik krijg het volgende maar niet aan de praat, weet iemand hoe ik dit zou moeten doen;
Bij het tonen van zoekresultaten wil ik het totaal aantal gevonden regels tellen (ten behoeve van navigatie), maar het volgende script geeft een fout!?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
<?php
// Count how many rows there are in the table
$countrows = "SELECT count(ARTIKELEN.* , ARTIKELSOORTEN.NAAM as ART_SOORT , ARTIKELEN_LEVERANCIERS.LEVID, ARTIKELEN_LEVERANCIERS.LEVREFERENTIE) FROM ARTIKELEN INNER JOIN
(ARTIKELSOORTEN
INNER JOIN
ARTIKELEN_LEVERANCIERS
ON
ARTIKELSOORTEN.ID = ARTIKELEN_LEVERANCIERS.ARTIKELID)
ON ARTIKELEN.SOORT=ARTIKELSOORTEN.ID ".$where." ORDER BY SOORT, NAAM";
$count = mysql_fetch_row(mysql_query($countrows));
?>
// Count how many rows there are in the table
$countrows = "SELECT count(ARTIKELEN.* , ARTIKELSOORTEN.NAAM as ART_SOORT , ARTIKELEN_LEVERANCIERS.LEVID, ARTIKELEN_LEVERANCIERS.LEVREFERENTIE) FROM ARTIKELEN INNER JOIN
(ARTIKELSOORTEN
INNER JOIN
ARTIKELEN_LEVERANCIERS
ON
ARTIKELSOORTEN.ID = ARTIKELEN_LEVERANCIERS.ARTIKELID)
ON ARTIKELEN.SOORT=ARTIKELSOORTEN.ID ".$where." ORDER BY SOORT, NAAM";
$count = mysql_fetch_row(mysql_query($countrows));
?>
Het script werkt wel zonder een join (zie onderstaande script), dus de fout zit naar mijn idee in de "count() opdracht" van de query!?
Code (php)
1
2
3
4
5
2
3
4
5
<?php
// Count how many rows there are in the table
$countrows = "SELECT count(*) FROM ARTIKELEN ".$where." ORDER BY SOORT, NAAM";
$count = mysql_fetch_row(mysql_query($countrows));
?>
// Count how many rows there are in the table
$countrows = "SELECT count(*) FROM ARTIKELEN ".$where." ORDER BY SOORT, NAAM";
$count = mysql_fetch_row(mysql_query($countrows));
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
// Count how many rows there are in the table
$countrows = "SELECT
count(ARTIKELEN.* , ARTIKELSOORTEN.NAAM as ART_SOORT , ARTIKELEN_LEVERANCIERS.LEVID, ARTIKELEN_LEVERANCIERS.LEVREFERENTIE) FROM ARTIKELEN INNER JOIN
ARTIKELSOORTEN
ON ARTIKELEN.SOORT=ARTIKELSOORTEN.ID
INNER JOIN
ARTIKELEN_LEVERANCIERS
ON ARTIKELSOORTEN.ID = ARTIKELEN_LEVERANCIERS.ARTIKELID
".$where."
ORDER BY SOORT, NAAM";
$count = mysql_fetch_row(mysql_query($countrows));
?>
// Count how many rows there are in the table
$countrows = "SELECT
count(ARTIKELEN.* , ARTIKELSOORTEN.NAAM as ART_SOORT , ARTIKELEN_LEVERANCIERS.LEVID, ARTIKELEN_LEVERANCIERS.LEVREFERENTIE) FROM ARTIKELEN INNER JOIN
ARTIKELSOORTEN
ON ARTIKELEN.SOORT=ARTIKELSOORTEN.ID
INNER JOIN
ARTIKELEN_LEVERANCIERS
ON ARTIKELSOORTEN.ID = ARTIKELEN_LEVERANCIERS.ARTIKELID
".$where."
ORDER BY SOORT, NAAM";
$count = mysql_fetch_row(mysql_query($countrows));
?>
en wat doe je juist met die count? over alles?
Ik kreeg (en krijg nogsteeds!) een foutmelding (Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given) op de volgende regel:
De waarde van $where (WHERE ARTIKELEN.BLOCK = 'N') is gelijk aan de variant zonder de join, daar kan het naar mijn idee niet aan liggen. De haakjes in de sql zorgen ervoor er toch voor een join wordt gedaan op het resultaat van de join (tussen de haakjes)?
Ik zoek nog even verder... doch tips zijn welkom! :-)
Toevoeging op 07/01/2011 13:55:50:
Ik heb de oplossing gevonden... de juiste query moest zijn:
Code (php)
1
2
3
2
3
<?php
$countrows = "SELECT count(*) FROM ARTIKELEN INNER JOIN (ARTIKELSOORTEN INNER JOIN ARTIKELEN_LEVERANCIERS ON ARTIKELSOORTEN.ID = ARTIKELEN_LEVERANCIERS.ARTIKELID) ON ARTIKELEN.SOORT=ARTIKELSOORTEN.ID ".$where." ORDER BY ARTIKELEN.SOORT, ARTIKELEN.NAAM";
?>
$countrows = "SELECT count(*) FROM ARTIKELEN INNER JOIN (ARTIKELSOORTEN INNER JOIN ARTIKELEN_LEVERANCIERS ON ARTIKELSOORTEN.ID = ARTIKELEN_LEVERANCIERS.ARTIKELID) ON ARTIKELEN.SOORT=ARTIKELSOORTEN.ID ".$where." ORDER BY ARTIKELEN.SOORT, ARTIKELEN.NAAM";
?>
In elk geval dank voor je reactie!
Gewijzigd op 07/01/2011 13:46:01 door Marco V