Deze code laat maar 4 linkpartners zien ipv de 7 die ik er nu in heb staan.
Hoe kan dit?
<?php
$queryKliks = "
SELECT
p.partner_id,
p.partner_naam,
p.partner_url,
COUNT(pk.datumtijd) AS aantal_kliks
FROM
klikspartners AS pk
INNER JOIN
partners AS p
ON
pk.partner_id = p.partner_id
WHERE
YEAR(pk.datumtijd ) = YEAR( CURDATE() )
GROUP BY p.partner_id
ORDER BY RAND()";
$resultKliks = mysql_query($queryKliks) or die (mysql_error());
Je doet een INNER JOIN, dus dat betekent dat in beide tabellen corresponderende records moeten zijn. Dat zou je even kunnen checken.
[edit]
Je zou ook nog even de WHERE condition weg kunnen halen, om te kijken of dat iets uitmaakt.
[/edit]
?
Onbekende gebruiker
29-10-2006 11:01
Ja, in de klikspartners tabel staan alleen de partner_id's waar op geklikt is nog voor ik die andere 3 nieuwe linkpartners had toegevoegd.
Waarschijnlijk kan ik dus beter een andere query maken om de linkpartners te tonen. Ik zal het eens proberen.
?
Onbekende gebruiker
29-10-2006 11:12
Nee, dit werkt niet, hij laat wel alle linkpartners zien maar de bijbehorende kliks kloppen niet.
<?php
//Kliks van partners
$queryKliks = "
SELECT
p.partner_id,
COUNT(pk.datumtijd) AS aantal_kliks
FROM
klikspartners AS pk
INNER JOIN
partners AS p
ON
pk.partner_id = p.partner_id
WHERE
YEAR(pk.datumtijd ) = YEAR( CURDATE() )
GROUP BY p.partner_id
ORDER BY RAND()";
$resultKliks = mysql_query($queryKliks) or die (mysql_error());
$rowKliks = mysql_fetch_object($resultKliks);
//partners gegevens
$querypartners = "SELECT * FROM partners";
$resultpartners = mysql_query($querypartners) or die (mysql_error());
Dan moet het iets met je WHERE zijn. Daar zit ook pk.datumtijd in als eis, dus blijkbaar wordt daaraan in drie van de zeven gevallen niet voldaan.
[edit]
Ik moet er trouwens vandoor. Kijk vanavond nog wel even of het is opgelost!
[/edit]
Als je LEFT JOIN gebruikt moet je wel even kijken welke tabel de 'linker' en welke tabel de 'rechter' is. Uit de linker tabel worden alle velden weergegeven ongeacht of er matches zijn met de rechter tabel.
Dit zou denk ik moeten werken:
SELECT
p.partner_id,
COUNT(pk.datumtijd) AS aantal_kliks
FROM
partners AS p
LEFT JOIN
klikspartners AS pk
ON
pk.partner_id = p.partner_id
WHERE
YEAR(pk.datumtijd ) = YEAR( CURDATE() )
GROUP BY p.partner_id
ORDER BY RAND()
?
Onbekende gebruiker
29-10-2006 15:52
Als ik dit doe dan geeft hij [4] aan overal achter.
Dit is het aantal id's dat voorkomt in de rij van partner_id van de kliks tabel.
<?php
//Kliks van partners
$queryKliks = "
SELECT
p.partner_id,
COUNT(pk.datumtijd) AS aantal_kliks
FROM
partners AS p
LEFT JOIN
klikspartners AS pk
ON
pk.partner_id = p.partner_id
WHERE
YEAR(pk.datumtijd ) = YEAR( CURDATE() )
GROUP BY p.partner_id";
$resultKliks = mysql_query($queryKliks) or die (mysql_error());
$rowKliks = mysql_fetch_object($resultKliks);
//partners gegevens
$querypartners = "SELECT * FROM partners";
$resultpartners = mysql_query($querypartners) or die (mysql_error());
Ik heb nu het volgende.
Hij geeft nu wel het aantal kliks weer achter de linkpartners.
Alleen geeft hij de linkpartners weer waar ook daadwerkelijk op geklikt is.
Dus als het partner_id nog niet voorkomt in de klikspartners tabel dan geeft hij die linkpartner niet weer op de pagina.
<?php
//Kliks van partners
$queryKliks = "
SELECT
p1.partner_id,
p1.partner_naam,
p1.partner_url,
COUNT(pk.datumtijd) AS aantal_kliks
FROM
klikspartners AS pk
INNER JOIN
partners AS p1
ON
pk.partner_id = p1.partner_id
WHERE
YEAR(pk.datumtijd ) = YEAR( CURDATE() )
GROUP BY p1.partner_id
ORDER BY RAND()";
$resultKliks = mysql_query($queryKliks) or die (mysql_error());