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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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++;
?>
//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++;
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
$queryKlik = "
SELECT
p.naam AS naam,
p.id AS id,
COUNT(partnerKliks.datumtijd) as maandtotaal
FROM
partners AS p,
partnerKliks
WHERE
MONTH(partnerKliks.datumtijd) = MONTH(CURDATE())
AND
YEAR(partnerKliks.datumtijd) = YEAR(CURDATE())
AND
p.url_id = ". $_GET['id']."
ORDER BY
maandtotaal
DESC LIMIT 0,10";
?>
$queryKlik = "
SELECT
p.naam AS naam,
p.id AS id,
COUNT(partnerKliks.datumtijd) as maandtotaal
FROM
partners AS p,
partnerKliks
WHERE
MONTH(partnerKliks.datumtijd) = MONTH(CURDATE())
AND
YEAR(partnerKliks.datumtijd) = YEAR(CURDATE())
AND
p.url_id = ". $_GET['id']."
ORDER BY
maandtotaal
DESC LIMIT 0,10";
?>
Benoem wel overal de tabel waar de gegevens uit moeten komen.
Twijfel: Ik vraag me af of de COUNT() wel gaat werken/is toegestaan. Het kan zijn dat je dit in een subquery moet zetten. Je zou het eigenlijk in PostgreSQL of een andere (betere) database dan MySQL moeten proberen. MySQL slikt het wel, ik weet alleen niet of de gegevens ook kloppen. MySQL heeft problemen met GROUP BY, die o.a. bij COUNT() hoort.
Ik kreeg geen mailtje van je bericht vandaar dat ik wat later reageer.
Van tabellen samenvoegen snap ik echt niet veel, zit erg ingewikkeld in elkaar.
En wat je bij "twijfel" hebt neergezet is helemaal abracadabra voor me.
Helaas werkt de onderstaande query niet.
De foutmelding is dat hij de database niet kan weergeven.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?php
//Laat de 10 best bezochte partners zien van deze maand
$queryKlik = "
SELECT
p.naam AS naam,
p.id AS id,
COUNT(partnerKliks.datumtijd) as maandtotaal
FROM
partners AS p,
partnerKliks
WHERE
MONTH(partnerKliks.datumtijd) = MONTH(CURDATE())
AND
YEAR(partnerKliks.datumtijd) = YEAR(CURDATE())
AND
p.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++;
?>
//Laat de 10 best bezochte partners zien van deze maand
$queryKlik = "
SELECT
p.naam AS naam,
p.id AS id,
COUNT(partnerKliks.datumtijd) as maandtotaal
FROM
partners AS p,
partnerKliks
WHERE
MONTH(partnerKliks.datumtijd) = MONTH(CURDATE())
AND
YEAR(partnerKliks.datumtijd) = YEAR(CURDATE())
AND
p.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++;
?>
En wat betreft de COUNT(), dit is een agregate functie, zie http://docent.ehsal.be/vakken/infoburo/Access/SQL.html#_Toc415901456
Hopelijk is dat goed. Maar hij geeft gewoon de foutmelding die ik hier achter heb gezet:
Code (php)
1
2
3
2
3
<?php
$resultKlik = mysql_query($queryKlik) or die ("Sorry maar ik kan de beste 10 partners niet weergeven, probeer het later opnieuw.");
?>
$resultKlik = mysql_query($queryKlik) or die ("Sorry maar ik kan de beste 10 partners niet weergeven, probeer het later opnieuw.");
?>
Code (php)
1
2
3
2
3
<?php
$resultKlik = mysql_query($queryKlik) or die ("Sorry maar ik kan de beste 10 partners niet weergeven, probeer het later opnieuw.");
?>
$resultKlik = mysql_query($queryKlik) or die ("Sorry maar ik kan de beste 10 partners niet weergeven, probeer het later opnieuw.");
?>
mag (tijdelijk) worden:
Unknown column 'p.url_id' in 'where clause'
Elsy schreef op 17.10.2006 16:22:
Dat klopt helemaal! Deze kolom staat namelijk in de tabel partnerKliks.Dit is de foutmelding:
Unknown column 'p.url_id' in 'where clause'
Unknown column 'p.url_id' in 'where clause'
p.url_id moet dus worden partnerKliks.url_id
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause
Oplossing: 2 queries of 1 query met een subquery maken. De COUNT() moet in aparte query of in de subquery komen te staan.
In de eerst staan de naam van de link en de url en in de tweede tabel de kliks.
Hoe weet hij dan dat die ene link bij welke kliks horen.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?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++;
?>
//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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?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++;
?>
//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
Code (php)
1
2
3
4
5
2
3
4
5
partnerKliks
Veld Type Null Standaardwaarde
id int(4) Ja NULL
datumtijd datetime Ja
url_id text Ja
Veld Type Null Standaardwaarde
id int(4) Ja NULL
datumtijd datetime Ja
url_id text Ja
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
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
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.
EDIT: url om te kijken toegevoegd: http://www.kijk-vergelijk.nl/index2.php?id=9
De code is dus nu:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?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++;
?>
//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.
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.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?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++;
?>
//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?
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
Sorry,
Klaasjan