Ik moet twee tabellen samenvoegen.

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++;
?>

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
Werkende, maar brakke, query:

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.
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.
Ik heb het volgende stukje uit de code gehaald en het lijkt nu te werken.....maar alles blijft nu op 1 staan.

EDIT: url om te kijken toegevoegd: http://www.kijk-vergelijk.nl/index2.php?id=9

<?php
WHERE
p1.id = ".$_GET['id']."
?>

De code is dus nu:

<?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++;
?>
Ik krijg het niet voor elkaar.
en zo?

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
Je krijgt dan dit te zien:

http://www.kijk-vergelijk.nl/index2.php?id=9

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?
@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
Ja ik snap het probleem maar ik weet niet hoe het op te lossen.

Sorry,

Klaasjan

Reageren