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++;
?>
?
Onbekende gebruiker
17-10-2006 17:22
Lijkt dit al ergens op?
<?php
//Laat de 10 best bezochte partners zien van deze maand
$queryUrl = "
SELECT naam, id
FROM partners
LIMIT 0,10";
$resultUrl = mysql_query($queryUrl) or die (mysql_error());
//Laat de kliks zien van deze maand
$queryKlik = "
SELECT COUNT(datumtijd) as maandtotaal
FROM partnerKliks
WHERE MONTH(datumtijd) = MONTH(CURDATE()) AND YEAR(datumtijd) = YEAR(CURDATE()) AND url_id = ". $rowUrl['id'];
$resultKlik = mysql_query($queryKlik) or die (mysql_error());
//geeft de top 10 aan van 1 tot 10
$teller=1;
while ($rowUrl = mysql_fetch_assoc ($resultUrl) && $rowKlik = mysql_fetch_assoc ($resultKlik)) {
echo '<td align="left" width="25%">';
echo $teller . '.<a href="tussenpagina.php?id='. $rowUrl['id'].'" target="_blank">'.$rowUrl['naam'] . '</a></td>';
echo '<td class="kliks10" width="25%">['.$rowKlik['maandtotaal'].']</td>' ;
$teller++;
?>
Alleen krijg ik deze foutmelding:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3
SELECT
p1.naam,
p1.url, (
SELECT
COUNT( partnerkliks.datumtijd )
FROM
partnerkliks
WHERE
MONTH( partnerkliks.datumtijd ) = MONTH( CURDATE( ) )
AND
YEAR( partnerkliks.datumtijd ) = YEAR( CURDATE() )
AND
partnerkliks.id_partners = 1
GROUP BY (partnerkliks.id_partners)
) AS aantalkliks
FROM
partners AS p1
WHERE
p1.id = 1
De beide waardes 1 kun je vervangen door $_GET['id']. Ik zal nog eens kijken of er een fraaiere query is te maken, ik ben over deze query niet tevreden. Het moet volgens mij beter kunnen.
?
Onbekende gebruiker
17-10-2006 17:39
Helaas werkt het bij mij niet. Ik heb even de juiste tabelnamen er in gezet.
<?php
//Laat de 10 best bezochte partners zien van deze maand
$queryKlik = "
SELECT
p1.naam,
p1.url,
p1.id, (
SELECT
COUNT( partnerKliks.datumtijd )
FROM
partnerKliks
WHERE
MONTH( partnerKliks.datumtijd ) = MONTH( CURDATE( ) )
AND
YEAR( partnerKliks.datumtijd ) = YEAR( CURDATE() )
AND
partnerKliks.url_id = ".$_GET['id']."
GROUP BY (partnerKliks.url_id)
) AS aantalkliks
FROM
partners AS p1
WHERE
p1.id = ".$_GET['id']." ORDER BY aantalkliks DESC LIMIT 0,10";
$resultKlik = mysql_query($queryKlik) or die (mysql_error());
//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['aantalkliks'].']</td>' ;
$teller++;
?>
Geen foutmelding maar dit is wat ik zie in de top 10:
EDIT: tabellen bijgevoegd
partnerKliks
Veld Type Null Standaardwaarde
id int(4) Ja NULL
datumtijd datetime Ja
url_id text Ja
partners
Veld Type Null Standaardwaarde
id int(5) Ja NULL
naam varchar(100) Ja
infoNaam varchar(255) Ja
url varchar(255) Ja
urlTerug varchar(255) Ja
rubriek varchar(255) Ja
plaatsingsDatum varchar(255) Ja
plaatje varchar(255) Ja
omschrijving text Ja
kliks int(5) Ja 0
datumtijd datetime Ja
p_id int(4) Ja 0
Hier heb ik alleen de naam en de url van nodig voor de top 10
EDIT:
Wat me opvalt is dat hij "vijftigplus" laat zien en dat heeft het zelfde id als in de browser staat, en dat id is van de linkpartnerpagina. Dus daar is iets nog niet goed.
?
Onbekende gebruiker
17-10-2006 18:21
Ik heb het volgende stukje uit de code gehaald en het lijkt nu te werken.....maar alles blijft nu op 1 staan.
<?php
//Laat de 10 best bezochte partners zien van deze maand
$queryKlik = "
SELECT
p1.naam,
p1.url,
p1.id, (
SELECT
COUNT( partnerKliks.datumtijd )
FROM
partnerKliks
WHERE
MONTH( partnerKliks.datumtijd ) = MONTH( CURDATE( ) )
AND
YEAR( partnerKliks.datumtijd ) = YEAR( CURDATE() )
AND
partnerKliks.url_id = ".$_GET['id']."
GROUP BY (partnerKliks.url_id)
) AS aantalkliks
FROM
partners AS p1
ORDER BY aantalkliks DESC LIMIT 0,10";
$resultKlik = mysql_query($queryKlik) or die (mysql_error());
//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['aantalkliks'].']</td>' ;
$teller++;
?>
SELECT
p1.naam,
p1.url,
p1.id,
COUNT(pk.datumtijd)
FROM
partnerKliks AS pk,
partners AS p1
WHERE
MONTH(pk.datumtijd ) = MONTH( CURDATE( ) )
AND
YEAR(pk.datumtijd ) = YEAR( CURDATE() )
AND
pk.url_id = ".$_GET['id']."
AND pk.url_id = p1.id
GROUP BY pk.url_id
En wat dan weer opvalt is dat die ene link hetzelfde id heeft als in de browser wordt weergegeven, namelijk 9. Waarschijnlijk komt dit omdat je met de $_GET functie het cijfer 9 uit de browser leest.
<?php
//Laat de 10 best bezochte partners zien van deze maand
$queryKlik = "
SELECT
p1.naam,
p1.url,
p1.id, (
SELECT
COUNT( partnerKliks.datumtijd )
FROM
partnerKliks
WHERE
MONTH( partnerKliks.datumtijd ) = MONTH( CURDATE( ) )
AND
YEAR( partnerKliks.datumtijd ) = YEAR( CURDATE() )
GROUP BY (partnerKliks.url_id)
) AS aantalkliks
FROM
partners AS p1
ORDER BY aantalkliks DESC LIMIT 0,10";
$resultKlik = mysql_query($queryKlik) or die (mysql_error());
//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['aantalkliks'].']</td>' ;
$teller++;
?>
enzo?
?
Onbekende gebruiker
18-10-2006 09:31
@KlaasJan
Dit is de foutmelding:
Warning: mysql_query() [function.mysql-query]: Unable to save result set in /usr/home/familiev/domains/kijk-vergelijk.nl/public_html/partners2.php on line 85
Subquery returns more than 1 row