Tabel1: Hierin staan de namen en de url's van de linken. Ik heb nodig uit deze tabel (partners) de "naam" en de "url".
Tabel2: Hierin zitten de kliks van die linken. Ik heb nodig uit deze tabel (partnerKliks) de "datumtijd" en de "url_id".
Bij iedere klik op een link wordt hier een nieuwe rij aangemaakt. Als je de datumtijd optelt van de bijgehorende url_id dan weet je hoevaak er op die bewuste link geklikt is.
Ik had al iets geprobeerd maar het werkt niet omdat ik niet goed met dit soort codes uit de voeten kan.
Ik wil graag dat je de best bezochte linkpartners in de top 10 kunt zien van deze maand.
<?php
//Laat de 10 best bezochte partners zien van deze maand
$queryKlik = "
SELECT p.naam, p.id, COUNT(datumtijd) as maandtotaal
FROM partners AS p, partnerKliks
WHERE MONTH(datumtijd) = MONTH(CURDATE()) AND YEAR(datumtijd) = YEAR(CURDATE()) AND url_id = ". $_GET['id']."
ORDER BY maandtotaal
DESC LIMIT 0,10";
$resultKlik = mysql_query($queryKlik) or die ("Sorry maar ik kan de beste 10 partners niet weergeven, probeer het later opnieuw.");
//geeft de top 10 aan van 1 tot 10
$teller=1;
while ($rowKlik = mysql_fetch_assoc ($resultKlik)) {
echo '<td align="left" width="25%">';
echo $teller . '.<a href="tussenpagina.php?id='. $rowKlik['id'].'" target="_blank">'.$rowKlik['naam'] . '</a></td>';
echo '<td class="kliks10" width="25%">['.$rowKlik['maandtotaal'].']</td>' ;
$teller++;
?>
Ik ben ook even aan het meekijken en proberen, ik weet nog niet zo heel goed hoe ik met JOINS in SQL moet werken, maar volgens mij wordt het dan ongeveer zoiets:
SELECT
p1.naam,
p1.url,
p1.id,
COUNT(pk.datumtijd)
FROM
partnerKliks AS pk
INNER JOIN
partners AS p1
ON
pk.url_id = p1.id
WHERE
MONTH(pk.datumtijd ) = MONTH( CURDATE( ) )
AND
YEAR(pk.datumtijd ) = YEAR( CURDATE() )
AND
p1.id = ".$_GET['id']."
GROUP BY p1.id
?
Onbekende gebruiker
18-10-2006 12:07
@Robert
Volgens mij hadden we deze versie al eerder.
Is het niet zo dat je helemaal geen $_GET moet gebruiken?
Want hij laat nu "vijftigplus" zien omdat dat het id 9 heeft en in de browser staat ook id=9 van de partnerpagina.
Eigenlijk moet er gewoon een top10 komen te staan met gegevens uit twee tabellen. De best bezocht linken zie je dan.
SELECT
p1.naam,
p1.url,
p1.id,
COUNT(pk.datumtijd) AS aantal_clicks
FROM
partnerKliks AS pk
INNER JOIN
partners AS p1
ON
pk.url_id = p1.id
WHERE
MONTH(pk.datumtijd ) = MONTH( CURDATE( ) )
AND
YEAR(pk.datumtijd ) = YEAR( CURDATE() )
GROUP BY p1.id
ORDER BY aantal_clicks DESC
LIMIT 0,10
De ORDER BY weet ik niet of dat werkt, zou je moeten proberen. Ik heb ook een LIMIT erop gezet, zodat die (als ORDER BY wel werkt) alleen de hoogste 10 selecteerd.
Verder heb ik inderdaad die $_GET['waarde'] eruit gehaald, omdat dat niet nodig is.
?
Onbekende gebruiker
18-10-2006 12:21
Het ziet er al beter uit.
Dat je er nog geen 10 ziet komt omdat er nog niet op 10 linken is geklikt.
Alleen laat hij het aantal kliks erachter nog niet zien.
Ik doe er even een screenshot bij misschien helpt dat?
Dat helpt, dan kan ik zien dat de query an sich wel werkt, hij sorteert de resultaten zoals blijkt wel prima, dus dat is 1 deel van het probleem. kan je de code van de while lus eens posten, ik ga ondertussen naar huis, en zal dan eens kijken of daar wat in moet veranderen :)
?
Onbekende gebruiker
18-10-2006 12:37
Hier komt hij....
<?php
//Laat de 10 best bezochte partners zien van deze maand
$queryKliks = "
SELECT
p1.id,
p1.naam,
p1.url,
COUNT(pk.datumtijd) AS aantal_clicks
FROM
partnerKliks AS pk
INNER JOIN
partners AS p1
ON
pk.url_id = p1.id
WHERE
MONTH(pk.datumtijd ) = MONTH( CURDATE( ) )
AND
YEAR(pk.datumtijd ) = YEAR( CURDATE() )
GROUP BY p1.id
ORDER BY aantal_clicks DESC
LIMIT 0,10";
$resultKliks = mysql_query($queryKliks) or die (mysql_error());
//geeft de top 10 aan van 1 tot 10
$teller=1;
while ($rowKliks = mysql_fetch_assoc ($resultKliks)) {
echo '<td align="left" width="25%">';
echo $teller . '.<a href="tussenpagina.php?id='. $rowKliks['id'].'" target="_blank">'.$rowKliks['naam'] . '</a></td>';
echo '<td class="kliks10" width="25%">['.$rowKlik['aantal_clicks'].']</td>' ;
$teller++;
while ($rowKliks = mysql_fetch_assoc ($resultKliks)) {
Je ziet dat je de gegevens in $rowKliks zet, maar later probeer je aantal_clicks te echo'en met $rowKlik , dus zonder s...
Dit zou het dus moeten zijn:
<?php
echo '<td class="kliks10" width="25%">['.$rowKliks['aantal_clicks'].']</td>' ;
?>
[edit]
Ik ben intussen dus thuisgekomen :)
[/edit]
[edit]
NR 2:
Ik hoop dat dat het probleem oplost, want de query lijkt me helemaal goed te gaan, wat het grootste deel van het probleem was :)
[/edit]
?
Onbekende gebruiker
18-10-2006 14:32
@Robert
Knap dat je dat weer gezien hebt, ik had er al 234 keer overheen gelezen!
Volgens mij werkt het nu.
Hopelijk werkt alles nu goed dus ook de kliks in de info van de linkpartners maar dat kan zich alleen uitwijzen als we de volgende maand krijgen.
Robert, bedankt, je hebt het weer voor elkaar gekregen. Ik vind dit onderdeel erg ingewikkeld van tabellen samenvoegen.