4 tabellen combineren en resultaat weergeven
Tabel academy_landingviews
Tabel academy_download
Tabel academy
Tabel contacten
Nu is het zo dat ik een overzicht wil van alle ebooks die geplaatst zijn onder de tabel academy in combinatie met de status bij de contacten. De status kan bvb koud, lead, prospect of klant zijn.
Wat ik tot nu toe heb zitten proberen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT
a.titel, alv.academy_id, SUM(alv.view) as alvv, COUNT(ad.id) as adid
FROM
academy_landingviews alv
INNER JOIN
academy_download ad
ON
alv.academy_id = ad.academy_id
INNER JOIN
academy a
ON
alv.academy_id = a.id
INNER JOIN
contacten c
ON
alv.user_id = c.id
GROUP BY
alv.academy_id
a.titel, alv.academy_id, SUM(alv.view) as alvv, COUNT(ad.id) as adid
FROM
academy_landingviews alv
INNER JOIN
academy_download ad
ON
alv.academy_id = ad.academy_id
INNER JOIN
academy a
ON
alv.academy_id = a.id
INNER JOIN
contacten c
ON
alv.user_id = c.id
GROUP BY
alv.academy_id
Ik krijg nu een overzicht van alle resultaten grouped by de titel van een ebook. Maar nog niet in combinatie met de contacten status. Verder dan dit geraak ik niet. Iemand een suggestie?
Misschien is mijn query ook deels verkeerd. Geen idee...
Nu maak ik een overzicht in een html tabel (zie hieronder) met de resultaten (tabel zit in een loop). Later wil ik dit in grafieken steken.
HTML tabel:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<p>Cijfers downloads/landingviews ebooks/wp met ID = <? echo $row['academy_id']; ?> en titel = <?php echo $row['titel']; ?></p>
<table width="50%">
<tr>
<td>Anonieme views</td>
<td><?php echo $row['alvv']; ?></td>
</tr>
<tr>
<td>Anonieme downloads</td>
<td><?php echo $row['adid']; ?></td>
</tr>
<tr>
<td>Totale conversie</td>
<td><?php echo round((($row['adid'] / $row['alvv']) * 100), 0); ?>%</td>
</tr>
</table>
<table width="50%">
<tr>
<td>Anonieme views</td>
<td><?php echo $row['alvv']; ?></td>
</tr>
<tr>
<td>Anonieme downloads</td>
<td><?php echo $row['adid']; ?></td>
</tr>
<tr>
<td>Totale conversie</td>
<td><?php echo round((($row['adid'] / $row['alvv']) * 100), 0); ?>%</td>
</tr>
</table>
Gewijzigd op 12/12/2015 14:01:17 door Brecht S
Dan groepeer je ook op status. Maar ik weet niet zeker of dit het resultaat is wat je wilt.
Note: in principe moet je bij GROUP BY alle velden noemen die geen aggregate functie zijn (zoals SUM of COUNT). Daarom heb ik a.titel ook toegevoegd.
Het uiteindelijke resultaat zou moeten zijn:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
Titel
- Aantal landingviews met status koud: x
- Aantal downloads met status koud: x
- Conversie koud: x%
- Aantal landingviews zonder status (dit zijn de personen die nog niet voorkomen in de tabel contacten): x
- Aantal downloads zonder status (...): x
- Conversie anoniem: x%
- Aantal landingviews met status lead: x
- Aantal downloads met status lead: x
- Conversie lead: x%
- ... (enz voor alle statussen bij de contacten tabel)
- Aantal landingviews met status koud: x
- Aantal downloads met status koud: x
- Conversie koud: x%
- Aantal landingviews zonder status (dit zijn de personen die nog niet voorkomen in de tabel contacten): x
- Aantal downloads zonder status (...): x
- Conversie anoniem: x%
- Aantal landingviews met status lead: x
- Aantal downloads met status lead: x
- Conversie lead: x%
- ... (enz voor alle statussen bij de contacten tabel)
En deze tabel dan in een loop per titel. Zie ook mijn voorbeeld html tabel bovenaan. Dit is de uiteindelijke vorm die ik wil.
Gewijzigd op 12/12/2015 13:59:46 door Brecht S
Het komt erop neer dat je de count zo vaak laat terugkomen als er status waardes zijn.
Afhankelijk of je status een vaste lijst met waardes is of kan variëren, kun je de query helemaal uitschrijven of moet je hem in je script genereren.
Als je het Google resultaat niet snapt, kom dan terug dan maak ik een voorbeeld.
http://anothermysqldba.blogspot.de/2013/06/pivot-tables-example-in-mysql.html
Nu weet ik wat je bedoeld maar ik geraak niet uit aan mijn query...
Ik zie nog steeds niet wat ik wil zien
@Jan: ik heb het inderdaad opgezocht en vond deze: Nu weet ik wat je bedoeld maar ik geraak niet uit aan mijn query...
Ik zie nog steeds niet wat ik wil zien
http://stackoverflow.com/questions/7674786/mysql-pivot-table
zou het zoiets worden:
Op basis van deze post: zou het zoiets worden:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
SELECT
a.titel, alv.academy_id, SUM(alv.view) as alvv,
SUM(CASE WHEN (c.status='koud') THEN 1 ELSE 0 END) AS SumKoud,
SUM(CASE WHEN (c.status='lead') THEN 1 ELSE 0 END) AS SumLead,
SUM(CASE WHEN (c.status='prospect') THEN 1 ELSE 0 END) AS SumProspect,
SUM(CASE WHEN (c.status='klant') THEN 1 ELSE 0 END) AS SumKlant
FROM
academy_landingviews alv
INNER JOIN
academy_download ad
ON
alv.academy_id = ad.academy_id
INNER JOIN
academy a
ON
alv.academy_id = a.id
INNER JOIN
contacten c
ON
alv.user_id = c.id
GROUP BY
alv.academy_id, a.titel
a.titel, alv.academy_id, SUM(alv.view) as alvv,
SUM(CASE WHEN (c.status='koud') THEN 1 ELSE 0 END) AS SumKoud,
SUM(CASE WHEN (c.status='lead') THEN 1 ELSE 0 END) AS SumLead,
SUM(CASE WHEN (c.status='prospect') THEN 1 ELSE 0 END) AS SumProspect,
SUM(CASE WHEN (c.status='klant') THEN 1 ELSE 0 END) AS SumKlant
FROM
academy_landingviews alv
INNER JOIN
academy_download ad
ON
alv.academy_id = ad.academy_id
INNER JOIN
academy a
ON
alv.academy_id = a.id
INNER JOIN
contacten c
ON
alv.user_id = c.id
GROUP BY
alv.academy_id, a.titel
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
SELECT
a.titel, alv.academy_id,
SUM(CASE WHEN (c.cont_status='koud') THEN 1 ELSE 0 END) AS SumKoud,
SUM(CASE WHEN (c.cont_status='lead') THEN 1 ELSE 0 END) AS SumLead,
SUM(CASE WHEN (c.cont_status='prospect') THEN 1 ELSE 0 END) AS SumProspect,
SUM(CASE WHEN (c.cont_status='klant') THEN 1 ELSE 0 END) AS SumKlant,
SUM(CASE WHEN (c.cont_status='pool') THEN 1 ELSE 0 END) AS SumPool
FROM
academy_landingviews alv
INNER JOIN
academy_download ad
ON
alv.academy_id = ad.academy_id
INNER JOIN
academy a
ON
alv.academy_id = a.id
INNER JOIN
contacten c
ON
alv.user_id = c.id
GROUP BY
alv.academy_id, a.titel
a.titel, alv.academy_id,
SUM(CASE WHEN (c.cont_status='koud') THEN 1 ELSE 0 END) AS SumKoud,
SUM(CASE WHEN (c.cont_status='lead') THEN 1 ELSE 0 END) AS SumLead,
SUM(CASE WHEN (c.cont_status='prospect') THEN 1 ELSE 0 END) AS SumProspect,
SUM(CASE WHEN (c.cont_status='klant') THEN 1 ELSE 0 END) AS SumKlant,
SUM(CASE WHEN (c.cont_status='pool') THEN 1 ELSE 0 END) AS SumPool
FROM
academy_landingviews alv
INNER JOIN
academy_download ad
ON
alv.academy_id = ad.academy_id
INNER JOIN
academy a
ON
alv.academy_id = a.id
INNER JOIN
contacten c
ON
alv.user_id = c.id
GROUP BY
alv.academy_id, a.titel
Maar het resultaat is er nog steeds niet. Ik mis ook nog de download aantallen hier in de query. En mijn landingviews cijfers zijn ook niet juist met hetgeen in manueel tel in de db. Als resultaat krijg ik nu ook maar 1 ebook te zien alhoewel er meerdere in mijn db zitten (11 in totaal). Dus denk dat er nog iets met de JOINS zelf ook zal moeten gebeuren?
Hieronder mijn resultaten tabel:
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
<table width="100%">
<tr>
<td>Landingviews door koud</td>
<td><?php echo $row['SumKoud']; ?></td>
<td>Downloads door koud</td>
<td><?php echo $row['x']; ?></td>
</tr>
<tr>
<td>Landingviews door lead</td>
<td><?php echo $row['SumLead']; ?></td>
<td>Downloads door lead</td>
<td><?php echo $row['x']; ?></td>
</tr>
<tr>
<td>Landingviews door prospect</td>
<td><?php echo $row['SumProspect']; ?></td>
<td>Downloads door prospect</td>
<td><?php echo $row['x']; ?></td>
</tr>
<tr>
<td>Landingviews door klant</td>
<td><?php echo $row['SumKlant']; ?></td>
<td>Downloads door klant</td>
<td><?php echo $row['x']; ?></td>
</tr>
<tr>
<td>Landingviews door pool</td>
<td><?php echo $row['SumPool']; ?></td>
<td>Downloads door pool</td>
<td><?php echo $row['x']; ?></td>
</tr>
</table>
<tr>
<td>Landingviews door koud</td>
<td><?php echo $row['SumKoud']; ?></td>
<td>Downloads door koud</td>
<td><?php echo $row['x']; ?></td>
</tr>
<tr>
<td>Landingviews door lead</td>
<td><?php echo $row['SumLead']; ?></td>
<td>Downloads door lead</td>
<td><?php echo $row['x']; ?></td>
</tr>
<tr>
<td>Landingviews door prospect</td>
<td><?php echo $row['SumProspect']; ?></td>
<td>Downloads door prospect</td>
<td><?php echo $row['x']; ?></td>
</tr>
<tr>
<td>Landingviews door klant</td>
<td><?php echo $row['SumKlant']; ?></td>
<td>Downloads door klant</td>
<td><?php echo $row['x']; ?></td>
</tr>
<tr>
<td>Landingviews door pool</td>
<td><?php echo $row['SumPool']; ?></td>
<td>Downloads door pool</td>
<td><?php echo $row['x']; ?></td>
</tr>
</table>
Hier ontbreken natuurlijk nog de waarden voor de download aantallen.
Gewijzigd op 12/12/2015 16:42:20 door Brecht S
Misschien is het beter om te starten vanuit de academy tabel en die te joinen met subtabellen met de totalen.
Hiermee maak je een totaal query van landings_views per titel en status. Die gebruik ik zo meteen als subquery:
Code (php)
1
2
3
4
2
3
4
SELECT academy_id, cont_status, count(*)
FROM academy_landingviews
JOIN contacten ON id=user_id
GROUP BY academy_id, status
FROM academy_landingviews
JOIN contacten ON id=user_id
GROUP BY academy_id, status
Datzelfde doen we voor downloads
Code (php)
1
2
3
4
2
3
4
SELECT academy_id, cont_status, count(*)
FROM academy_download
JOIN contacten ON id=user_id
GROUP BY academy_id, status
FROM academy_download
JOIN contacten ON id=user_id
GROUP BY academy_id, status
En dat voegen we dan samen met een lijst van titels en alle statussen, startend vanuit de academy tabel. DE CROSS JOIN kun je eventueel vervangen door een tabel met unieke statussen mocht je die hebben.
Code (php)
1
2
3
4
5
2
3
4
5
SELECT
id, titel, status
FROM academy
CROSS JOIN (SELECT DISTINCT cont_status FROM contacten)
En nu alles samen:
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
SELECT
id, titel,
SUM(CASE WHEN (lv.cont_status='koud') THEN lv.aantal ELSE 0 END) AS SumLvKoud,
SUM(CASE WHEN (lv.cont_status='lead') THEN lv.aantal ELSE 0 END) AS SumLvLead,
SUM(CASE WHEN (lv.cont_status='prospect') THEN lv.aantal ELSE 0 END) AS SumLvProspect,
SUM(CASE WHEN (lv.cont_status='klant') THEN lv.aantal ELSE 0 END) AS SumLvKlant,
SUM(CASE WHEN (lv.cont_status='pool') THEN lv.aantal ELSE 0 END) AS SumLvPool,
SUM(CASE WHEN (dl.cont_status='koud') THEN dl.aantal ELSE 0 END) AS SumDlKoud,
SUM(CASE WHEN (dl.cont_status='lead') THEN dl.aantal ELSE 0 END) AS SumDlLead,
SUM(CASE WHEN (dl.cont_status='prospect') THEN dl.aantal ELSE 0 END) AS SumDlProspect,
SUM(CASE WHEN (dl.cont_status='klant') THEN dl.aantal ELSE 0 END) AS SumDlKlant,
SUM(CASE WHEN (dl.cont_status='pool') THEN dl.aantal ELSE 0 END) AS SumDlPool
FROM academy
CROSS JOIN (SELECT DISTINCT cont_status FROM contacten)
LEFT OUTER JOIN
(SELECT academy_id, cont_status, count(*) as aantal
FROM academy_landingviews
JOIN contacten ON id=user_id
GROUP BY academy_id, status) AS lv
ON academy.id=lv.academy_id and contacten.cont_status=lv.cont_status
LEFT OUTER JOIN
(SELECT academy_id, cont_status, count(*) as aantal
FROM academy_download
JOIN contacten ON id=user_id
GROUP BY academy_id, status) AS dl
ON academy.id=dl.academy_id and contacten.cont_status=dl.cont_status
GROUP BY id, titel
id, titel,
SUM(CASE WHEN (lv.cont_status='koud') THEN lv.aantal ELSE 0 END) AS SumLvKoud,
SUM(CASE WHEN (lv.cont_status='lead') THEN lv.aantal ELSE 0 END) AS SumLvLead,
SUM(CASE WHEN (lv.cont_status='prospect') THEN lv.aantal ELSE 0 END) AS SumLvProspect,
SUM(CASE WHEN (lv.cont_status='klant') THEN lv.aantal ELSE 0 END) AS SumLvKlant,
SUM(CASE WHEN (lv.cont_status='pool') THEN lv.aantal ELSE 0 END) AS SumLvPool,
SUM(CASE WHEN (dl.cont_status='koud') THEN dl.aantal ELSE 0 END) AS SumDlKoud,
SUM(CASE WHEN (dl.cont_status='lead') THEN dl.aantal ELSE 0 END) AS SumDlLead,
SUM(CASE WHEN (dl.cont_status='prospect') THEN dl.aantal ELSE 0 END) AS SumDlProspect,
SUM(CASE WHEN (dl.cont_status='klant') THEN dl.aantal ELSE 0 END) AS SumDlKlant,
SUM(CASE WHEN (dl.cont_status='pool') THEN dl.aantal ELSE 0 END) AS SumDlPool
FROM academy
CROSS JOIN (SELECT DISTINCT cont_status FROM contacten)
LEFT OUTER JOIN
(SELECT academy_id, cont_status, count(*) as aantal
FROM academy_landingviews
JOIN contacten ON id=user_id
GROUP BY academy_id, status) AS lv
ON academy.id=lv.academy_id and contacten.cont_status=lv.cont_status
LEFT OUTER JOIN
(SELECT academy_id, cont_status, count(*) as aantal
FROM academy_download
JOIN contacten ON id=user_id
GROUP BY academy_id, status) AS dl
ON academy.id=dl.academy_id and contacten.cont_status=dl.cont_status
GROUP BY id, titel
Ik heb geen idee wat ze hiermee willen zeggen?
en ik zie bvb ook dl.cont_status en lv.cont_status staan. Maar de cont_status is de lead, koud, ... en die komt enkel maar voor in de tabel contacten.
Gewijzigd op 12/12/2015 17:42:37 door Brecht S
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
SELECT
id, titel,
SUM(CASE WHEN (lv.cont_status='koud') THEN lv.aantal ELSE 0 END) AS SumLvKoud,
SUM(CASE WHEN (lv.cont_status='lead') THEN lv.aantal ELSE 0 END) AS SumLvLead,
SUM(CASE WHEN (lv.cont_status='prospect') THEN lv.aantal ELSE 0 END) AS SumLvProspect,
SUM(CASE WHEN (lv.cont_status='klant') THEN lv.aantal ELSE 0 END) AS SumLvKlant,
SUM(CASE WHEN (lv.cont_status='pool') THEN lv.aantal ELSE 0 END) AS SumLvPool,
SUM(CASE WHEN (dl.cont_status='koud') THEN dl.aantal ELSE 0 END) AS SumDlKoud,
SUM(CASE WHEN (dl.cont_status='lead') THEN dl.aantal ELSE 0 END) AS SumDlLead,
SUM(CASE WHEN (dl.cont_status='prospect') THEN dl.aantal ELSE 0 END) AS SumDlProspect,
SUM(CASE WHEN (dl.cont_status='klant') THEN dl.aantal ELSE 0 END) AS SumDlKlant,
SUM(CASE WHEN (dl.cont_status='pool') THEN dl.aantal ELSE 0 END) AS SumDlPool
FROM academy
CROSS JOIN (SELECT DISTINCT cont_status FROM contacten) AS c
LEFT OUTER JOIN
(SELECT academy_id, cont_status, count(*) as aantal
FROM academy_landingviews
JOIN contacten ON id=user_id
GROUP BY academy_id, status) AS lv
ON academy.id=lv.academy_id and c.cont_status=lv.cont_status
LEFT OUTER JOIN
(SELECT academy_id, cont_status, count(*) as aantal
FROM academy_download
JOIN contacten ON id=user_id
GROUP BY academy_id, status) AS dl
ON academy.id=dl.academy_id and c.cont_status=dl.cont_status
GROUP BY id, titel
id, titel,
SUM(CASE WHEN (lv.cont_status='koud') THEN lv.aantal ELSE 0 END) AS SumLvKoud,
SUM(CASE WHEN (lv.cont_status='lead') THEN lv.aantal ELSE 0 END) AS SumLvLead,
SUM(CASE WHEN (lv.cont_status='prospect') THEN lv.aantal ELSE 0 END) AS SumLvProspect,
SUM(CASE WHEN (lv.cont_status='klant') THEN lv.aantal ELSE 0 END) AS SumLvKlant,
SUM(CASE WHEN (lv.cont_status='pool') THEN lv.aantal ELSE 0 END) AS SumLvPool,
SUM(CASE WHEN (dl.cont_status='koud') THEN dl.aantal ELSE 0 END) AS SumDlKoud,
SUM(CASE WHEN (dl.cont_status='lead') THEN dl.aantal ELSE 0 END) AS SumDlLead,
SUM(CASE WHEN (dl.cont_status='prospect') THEN dl.aantal ELSE 0 END) AS SumDlProspect,
SUM(CASE WHEN (dl.cont_status='klant') THEN dl.aantal ELSE 0 END) AS SumDlKlant,
SUM(CASE WHEN (dl.cont_status='pool') THEN dl.aantal ELSE 0 END) AS SumDlPool
FROM academy
CROSS JOIN (SELECT DISTINCT cont_status FROM contacten) AS c
LEFT OUTER JOIN
(SELECT academy_id, cont_status, count(*) as aantal
FROM academy_landingviews
JOIN contacten ON id=user_id
GROUP BY academy_id, status) AS lv
ON academy.id=lv.academy_id and c.cont_status=lv.cont_status
LEFT OUTER JOIN
(SELECT academy_id, cont_status, count(*) as aantal
FROM academy_download
JOIN contacten ON id=user_id
GROUP BY academy_id, status) AS dl
ON academy.id=dl.academy_id and c.cont_status=dl.cont_status
GROUP BY id, titel
de lv_cont_status komt ook uit contacten, ik doe daarvoor de JOIN contacten in de subquery.
Probeer de queries uit mijn vorige post maar eens stap voor stap uit te voeren in bv phpMyAdmin. Dan zie je wat het resultaat telkens is.
Maar er is nog 1 probleem. Ik heb soms geen user_id in de tabellen en die worden nu niet weergegeven. Enkel de resultaten die ook een user_id hebben worden nu weergegeven.
Het zou kunnen dat iemand een landingview doet maar niet gekend is in de tabel contacten, dan is dit dus een anonieme view. Bij de downloads kan dit niet, want iedereen die een download doet krijgt ook een user_id (als ze er nog geen hadden). Het gaat hier enkel over de landingviews.
Aangepaste query:
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
SELECT
id, titel,
SUM(CASE WHEN (lv.cont_status='koud') THEN lv.aantal ELSE 0 END) AS SumLvKoud,
SUM(CASE WHEN (lv.cont_status='lead') THEN lv.aantal ELSE 0 END) AS SumLvLead,
SUM(CASE WHEN (lv.cont_status='prospect') THEN lv.aantal ELSE 0 END) AS SumLvProspect,
SUM(CASE WHEN (lv.cont_status='klant') THEN lv.aantal ELSE 0 END) AS SumLvKlant,
SUM(CASE WHEN (lv.cont_status='pool') THEN lv.aantal ELSE 0 END) AS SumLvPool,
SUM(CASE WHEN (dl.cont_status='koud') THEN dl.aantal ELSE 0 END) AS SumDlKoud,
SUM(CASE WHEN (dl.cont_status='lead') THEN dl.aantal ELSE 0 END) AS SumDlLead,
SUM(CASE WHEN (dl.cont_status='prospect') THEN dl.aantal ELSE 0 END) AS SumDlProspect,
SUM(CASE WHEN (dl.cont_status='klant') THEN dl.aantal ELSE 0 END) AS SumDlKlant,
SUM(CASE WHEN (dl.cont_status='pool') THEN dl.aantal ELSE 0 END) AS SumDlPool
FROM academy
CROSS JOIN (SELECT DISTINCT cont_status FROM contacten) AS c
LEFT OUTER JOIN
(SELECT academy_id, cont_status, count(*) as aantal
FROM academy_landingviews alv
JOIN contacten c ON c.id=alv.user_id
GROUP BY academy_id, cont_status) AS lv
ON academy.id=lv.academy_id and c.cont_status=lv.cont_status
LEFT OUTER JOIN
(SELECT academy_id, cont_status, count(*) as aantal
FROM academy_download adl
JOIN contacten c ON c.id=adl.user_id
GROUP BY academy_id, cont_status) AS dl
ON academy.id=dl.academy_id and c.cont_status=dl.cont_status
GROUP BY id, titel
id, titel,
SUM(CASE WHEN (lv.cont_status='koud') THEN lv.aantal ELSE 0 END) AS SumLvKoud,
SUM(CASE WHEN (lv.cont_status='lead') THEN lv.aantal ELSE 0 END) AS SumLvLead,
SUM(CASE WHEN (lv.cont_status='prospect') THEN lv.aantal ELSE 0 END) AS SumLvProspect,
SUM(CASE WHEN (lv.cont_status='klant') THEN lv.aantal ELSE 0 END) AS SumLvKlant,
SUM(CASE WHEN (lv.cont_status='pool') THEN lv.aantal ELSE 0 END) AS SumLvPool,
SUM(CASE WHEN (dl.cont_status='koud') THEN dl.aantal ELSE 0 END) AS SumDlKoud,
SUM(CASE WHEN (dl.cont_status='lead') THEN dl.aantal ELSE 0 END) AS SumDlLead,
SUM(CASE WHEN (dl.cont_status='prospect') THEN dl.aantal ELSE 0 END) AS SumDlProspect,
SUM(CASE WHEN (dl.cont_status='klant') THEN dl.aantal ELSE 0 END) AS SumDlKlant,
SUM(CASE WHEN (dl.cont_status='pool') THEN dl.aantal ELSE 0 END) AS SumDlPool
FROM academy
CROSS JOIN (SELECT DISTINCT cont_status FROM contacten) AS c
LEFT OUTER JOIN
(SELECT academy_id, cont_status, count(*) as aantal
FROM academy_landingviews alv
JOIN contacten c ON c.id=alv.user_id
GROUP BY academy_id, cont_status) AS lv
ON academy.id=lv.academy_id and c.cont_status=lv.cont_status
LEFT OUTER JOIN
(SELECT academy_id, cont_status, count(*) as aantal
FROM academy_download adl
JOIN contacten c ON c.id=adl.user_id
GROUP BY academy_id, cont_status) AS dl
ON academy.id=dl.academy_id and c.cont_status=dl.cont_status
GROUP BY id, titel
En de bijhorende HTML tabel (die in een loop zit):
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
35
36
37
38
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
35
36
37
38
<table width="70%">
<tr>
<td>Landingviews door anoniem</td>
<td><?php echo $row['x']; ?></td>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Landingviews door koud</td>
<td><?php echo $row['SumLvKoud']; ?></td>
<td>Downloads door koud</td>
<td><?php echo $row['SumDlKoud']; ?></td>
</tr>
<tr>
<td>Landingviews door lead</td>
<td><?php echo $row['SumLvLead']; ?></td>
<td>Downloads door lead</td>
<td><?php echo $row['SumDlLead']; ?></td>
</tr>
<tr>
<td>Landingviews door prospect</td>
<td><?php echo $row['SumLvProspect']; ?></td>
<td>Downloads door prospect</td>
<td><?php echo $row['SumDlProspect']; ?></td>
</tr>
<tr>
<td>Landingviews door klant</td>
<td><?php echo $row['SumLvKlant']; ?></td>
<td>Downloads door klant</td>
<td><?php echo $row['SumDlKlant']; ?></td>
</tr>
<tr>
<td>Landingviews door pool</td>
<td><?php echo $row['SumLvPool']; ?></td>
<td>Downloads door pool</td>
<td><?php echo $row['SumDlPool']; ?></td>
</tr>
</table>
<tr>
<td>Landingviews door anoniem</td>
<td><?php echo $row['x']; ?></td>
<td> </td>
<td> </td>
</tr>
<tr>
<td>Landingviews door koud</td>
<td><?php echo $row['SumLvKoud']; ?></td>
<td>Downloads door koud</td>
<td><?php echo $row['SumDlKoud']; ?></td>
</tr>
<tr>
<td>Landingviews door lead</td>
<td><?php echo $row['SumLvLead']; ?></td>
<td>Downloads door lead</td>
<td><?php echo $row['SumDlLead']; ?></td>
</tr>
<tr>
<td>Landingviews door prospect</td>
<td><?php echo $row['SumLvProspect']; ?></td>
<td>Downloads door prospect</td>
<td><?php echo $row['SumDlProspect']; ?></td>
</tr>
<tr>
<td>Landingviews door klant</td>
<td><?php echo $row['SumLvKlant']; ?></td>
<td>Downloads door klant</td>
<td><?php echo $row['SumDlKlant']; ?></td>
</tr>
<tr>
<td>Landingviews door pool</td>
<td><?php echo $row['SumLvPool']; ?></td>
<td>Downloads door pool</td>
<td><?php echo $row['SumDlPool']; ?></td>
</tr>
</table>
Dus hier zit ik nog met de x die nog een cijfer moet krijgen
Gewijzigd op 12/12/2015 18:36:04 door Brecht S
Ik heb een paar vragen:
- geen user in landing_views: Wat is dan de waarde van user_id in deze tabel? Is dat NULL?
Mogelijk los je dit al op door regel 19 JOIN te vervangen door LEFT OUTER JOIN.
- Wat is de status van een anonieme user? Als je voorgaande verandert wordt status voor een anonieme user ook NULL.
En die vergelijken we nog nier op regel 3-7 en hebben we niet in de CROSS JOIN
Er hangt op dit moment dus ook geen contact aan want het is nog niet gekend. Door een download te doen zet ik een cookie die de user_id gelijk gaat stellen aan de net ge-inserte ID bij de contacten. Zo krijgen we dus de user_id in de downloads. Gaat iemand daarachter naar een andere landingspagina krijgt die terug een landingview en dan heeft die dus wel een user_id.
Een anonieme user heeft dus geen cont_status (om op je 2de vraag te antwoorden).
Zoals je kan zien wil ik in mijn html tabel hier ook een aantal (via een SUM) op 'plakken' (voor de waarde waar nu 'x' staat).
Hoe pak ik dit het best aan?
Gewijzigd op 12/12/2015 18:49:43 door Brecht S
De subquery van landings_view geeft dan ook een regel terug voor status anoniem.
Voor regel 3 kun je dan
SUM(CASE WHEN (lv.cont_status='anoniem') THEN lv.aantal ELSE 0 END) AS SumLvAnoniem,
toevoegen.
Dit is het eenvoudigst, wil je dit niet dan is er misschien nog wel een mogelijkheid maar die is iets ingewikkelder.
Ik kom er op terug na controle. Ik ben ook bezig met een bron toe te voegen hoe mensen op een bepaalde landingspagina zijn terechtgekomen. Hiervan zou ik ook een tabel willen maken of de 2 samenvoegen. Daar kom ik later op terug.
Toevoeging op 12/12/2015 19:36:19:
Ken jij al die mogelijkheden in de queries uit je hoofd? Dit is toch een heel ingewikkelde volgens mij. Of heb je daar een bepaald progje voor?
Ik ken deze constructies wel uit het hoofd, maar dat is dan wel na heel veel jaren ervaring met allerlei varianten van sql. En deze constructies zijn niet ongebruikelijk.
Ik ben nu ook weg, misschien treffen we elkaar morgen nog.
Dus had ik volgende query geprobeerd:
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
35
36
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
35
36
SELECT
id, titel, type,
SUM(CASE WHEN (lv.cont_status='anoniem') THEN lv.aantal ELSE 0 END) AS SumLvAnoniem,
SUM(CASE WHEN (lv.cont_status='anoniem' AND lv.bron='facebook') THEN lv.aantal ELSE 0 END) AS SumLvAnoniemFacebook,
SUM(CASE WHEN (lv.cont_status='koud') THEN lv.aantal ELSE 0 END) AS SumLvKoud,
SUM(CASE WHEN (lv.cont_status='koud' AND lv.bron='facebook') THEN 1 ELSE 0 END) AS SumLvKoudFacebook,
SUM(CASE WHEN (lv.cont_status='lead') THEN lv.aantal ELSE 0 END) AS SumLvLead,
SUM(CASE WHEN (lv.cont_status='lead' AND lv.bron='facebook') THEN 1 ELSE 0 END) AS SumLvLeadFacebook,
SUM(CASE WHEN (lv.cont_status='prospect') THEN lv.aantal ELSE 0 END) AS SumLvProspect,
SUM(CASE WHEN (lv.cont_status='prospect' AND lv.bron='facebook') THEN 1 ELSE 0 END) AS SumLvProspectFacebook,
SUM(CASE WHEN (lv.cont_status='klant') THEN lv.aantal ELSE 0 END) AS SumLvKlant,
SUM(CASE WHEN (lv.cont_status='klant' AND lv.bron='facebook') THEN 1 ELSE 0 END) AS SumLvKlantFacebook,
SUM(CASE WHEN (lv.cont_status='pool') THEN lv.aantal ELSE 0 END) AS SumLvPool,
SUM(CASE WHEN (lv.cont_status='pool' AND lv.bron='facebook') THEN 1 ELSE 0 END) AS SumLvPoolFacebook,
SUM(CASE WHEN (dl.cont_status='koud') THEN dl.aantal ELSE 0 END) AS SumDlKoud,
SUM(CASE WHEN (dl.cont_status='lead') THEN dl.aantal ELSE 0 END) AS SumDlLead,
SUM(CASE WHEN (dl.cont_status='prospect') THEN dl.aantal ELSE 0 END) AS SumDlProspect,
SUM(CASE WHEN (dl.cont_status='klant') THEN dl.aantal ELSE 0 END) AS SumDlKlant,
SUM(CASE WHEN (dl.cont_status='pool') THEN dl.aantal ELSE 0 END) AS SumDlPool
FROM academy
JOIN (SELECT DISTINCT cont_status FROM contacten) AS c
LEFT OUTER JOIN
(SELECT academy_id, cont_status, count(*) as aantal, bron
FROM academy_landingviews alv
LEFT OUTER JOIN contacten c ON c.id=alv.user_id
GROUP BY academy_id, cont_status) AS lv
ON academy.id=lv.academy_id and c.cont_status=lv.cont_status
LEFT OUTER JOIN
(SELECT academy_id, cont_status, count(*) as aantal, bron
FROM academy_download adl
JOIN contacten c ON c.id=adl.user_id
GROUP BY academy_id, cont_status) AS dl
ON academy.id=dl.academy_id and c.cont_status=dl.cont_status
GROUP BY id, titel
id, titel, type,
SUM(CASE WHEN (lv.cont_status='anoniem') THEN lv.aantal ELSE 0 END) AS SumLvAnoniem,
SUM(CASE WHEN (lv.cont_status='anoniem' AND lv.bron='facebook') THEN lv.aantal ELSE 0 END) AS SumLvAnoniemFacebook,
SUM(CASE WHEN (lv.cont_status='koud') THEN lv.aantal ELSE 0 END) AS SumLvKoud,
SUM(CASE WHEN (lv.cont_status='koud' AND lv.bron='facebook') THEN 1 ELSE 0 END) AS SumLvKoudFacebook,
SUM(CASE WHEN (lv.cont_status='lead') THEN lv.aantal ELSE 0 END) AS SumLvLead,
SUM(CASE WHEN (lv.cont_status='lead' AND lv.bron='facebook') THEN 1 ELSE 0 END) AS SumLvLeadFacebook,
SUM(CASE WHEN (lv.cont_status='prospect') THEN lv.aantal ELSE 0 END) AS SumLvProspect,
SUM(CASE WHEN (lv.cont_status='prospect' AND lv.bron='facebook') THEN 1 ELSE 0 END) AS SumLvProspectFacebook,
SUM(CASE WHEN (lv.cont_status='klant') THEN lv.aantal ELSE 0 END) AS SumLvKlant,
SUM(CASE WHEN (lv.cont_status='klant' AND lv.bron='facebook') THEN 1 ELSE 0 END) AS SumLvKlantFacebook,
SUM(CASE WHEN (lv.cont_status='pool') THEN lv.aantal ELSE 0 END) AS SumLvPool,
SUM(CASE WHEN (lv.cont_status='pool' AND lv.bron='facebook') THEN 1 ELSE 0 END) AS SumLvPoolFacebook,
SUM(CASE WHEN (dl.cont_status='koud') THEN dl.aantal ELSE 0 END) AS SumDlKoud,
SUM(CASE WHEN (dl.cont_status='lead') THEN dl.aantal ELSE 0 END) AS SumDlLead,
SUM(CASE WHEN (dl.cont_status='prospect') THEN dl.aantal ELSE 0 END) AS SumDlProspect,
SUM(CASE WHEN (dl.cont_status='klant') THEN dl.aantal ELSE 0 END) AS SumDlKlant,
SUM(CASE WHEN (dl.cont_status='pool') THEN dl.aantal ELSE 0 END) AS SumDlPool
FROM academy
JOIN (SELECT DISTINCT cont_status FROM contacten) AS c
LEFT OUTER JOIN
(SELECT academy_id, cont_status, count(*) as aantal, bron
FROM academy_landingviews alv
LEFT OUTER JOIN contacten c ON c.id=alv.user_id
GROUP BY academy_id, cont_status) AS lv
ON academy.id=lv.academy_id and c.cont_status=lv.cont_status
LEFT OUTER JOIN
(SELECT academy_id, cont_status, count(*) as aantal, bron
FROM academy_download adl
JOIN contacten c ON c.id=adl.user_id
GROUP BY academy_id, cont_status) AS dl
ON academy.id=dl.academy_id and c.cont_status=dl.cont_status
GROUP BY id, titel
Maar dan zijn de waarden bij SumLvAnoniemFacebook bvb dezelfde als die uit de SumLvAnoniem. Waarschijnlijk omdat ik geen count heb van de waarden in de sum met de bron.
Ik heb geprobeerd om een count te maken maar dat wil maar niet lukken.
Maar dit is niet helemaal wat ik eigenlijk wou. De bron kan namelijk alles bevatten en niet alleen facebook. Denk dat het geen goed idee is om die waarden vast te zetten omdat ik nu nog niet weet wat de bronnen allemaal kunnen zijn in de toekomst.
Gewijzigd op 13/12/2015 00:24:39 door Brecht S
Maar ik denk dat je bron anders moet oplossen, gezien je laatste opmerking.
Ik denk dat het beter is om de query op te splitsen: eerst een met de totalen op status niveau en dan een aparte (nieuwe) query voor de totalen per bron voor die status.
In je html tabel tabel krijg je dan:
id1 titel1 --totalen landing-views per status-- --totalen download per status
bron 1 --totalen landing-views per status voor deze bron--
bron 2 --totalen landing-views per status voor deze bron--
enz
id2 titel2 --totalen landing-views per status-- --totalen download per status
bron 1 --totalen landing-views per status voor deze bron--
bron 2 --totalen landing-views per status voor deze bron--
enz
enz
Dus uit de 1e query haal je alles wat verwijst naar bron weg en binnen de lus waar je deze 1 voor 1 verwerkt voer je een nieuwe query uit die de getallen per bron voor die titel ophaalt. Hoe dat moet hangt een beetje af hoe je dit nu in php doet.
Die 2e query zou iets kunnen zijn als:
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
id, titel, type, bron,
SUM(CASE WHEN (lv.cont_status='anoniem') THEN lv.aantal ELSE 0 END) AS SumLvAnoniem,
SUM(CASE WHEN (lv.cont_status='koud') THEN lv.aantal ELSE 0 END) AS SumLvKoud,
SUM(CASE WHEN (lv.cont_status='lead') THEN lv.aantal ELSE 0 END) AS SumLvLead,
SUM(CASE WHEN (lv.cont_status='prospect') THEN lv.aantal ELSE 0 END) AS SumLvProspect,
SUM(CASE WHEN (lv.cont_status='klant') THEN lv.aantal ELSE 0 END) AS SumLvKlant,
SUM(CASE WHEN (lv.cont_status='pool') THEN lv.aantal ELSE 0 END) AS SumLvPool,
FROM academy
JOIN (SELECT DISTINCT cont_status FROM contacten) AS c
LEFT OUTER JOIN
(SELECT academy_id, cont_status, bron, count(*) as aantal
FROM academy_landingviews alv
LEFT OUTER JOIN contacten c ON c.id=alv.user_id
GROUP BY academy_id, cont_status) AS lv
ON academy.id=lv.academy_id and c.cont_status=lv.cont_status
WHERE id= -hier de id die je nu verwerkt-
GROUP BY id, titel, bron
id, titel, type, bron,
SUM(CASE WHEN (lv.cont_status='anoniem') THEN lv.aantal ELSE 0 END) AS SumLvAnoniem,
SUM(CASE WHEN (lv.cont_status='koud') THEN lv.aantal ELSE 0 END) AS SumLvKoud,
SUM(CASE WHEN (lv.cont_status='lead') THEN lv.aantal ELSE 0 END) AS SumLvLead,
SUM(CASE WHEN (lv.cont_status='prospect') THEN lv.aantal ELSE 0 END) AS SumLvProspect,
SUM(CASE WHEN (lv.cont_status='klant') THEN lv.aantal ELSE 0 END) AS SumLvKlant,
SUM(CASE WHEN (lv.cont_status='pool') THEN lv.aantal ELSE 0 END) AS SumLvPool,
FROM academy
JOIN (SELECT DISTINCT cont_status FROM contacten) AS c
LEFT OUTER JOIN
(SELECT academy_id, cont_status, bron, count(*) as aantal
FROM academy_landingviews alv
LEFT OUTER JOIN contacten c ON c.id=alv.user_id
GROUP BY academy_id, cont_status) AS lv
ON academy.id=lv.academy_id and c.cont_status=lv.cont_status
WHERE id= -hier de id die je nu verwerkt-
GROUP BY id, titel, bron
Op regel 8 mag er geen komma meer staan (er zat een mysql foutje in) achteraan ;-)
Toevoeging op 14/12/2015 14:26:05:
Jan, er zit toch iets raar in.
Hieronder de mysql die ik gebruik:
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
id, titel, type, bron,
SUM(CASE WHEN (lv.cont_status='anoniem') THEN lv.aantal ELSE 0 END) AS SumLvAnoniem1,
SUM(CASE WHEN (lv.cont_status='koud') THEN lv.aantal ELSE 0 END) AS SumLvKoud1,
SUM(CASE WHEN (lv.cont_status='lead') THEN lv.aantal ELSE 0 END) AS SumLvLead1,
SUM(CASE WHEN (lv.cont_status='prospect') THEN lv.aantal ELSE 0 END) AS SumLvProspect1,
SUM(CASE WHEN (lv.cont_status='klant') THEN lv.aantal ELSE 0 END) AS SumLvKlant1,
SUM(CASE WHEN (lv.cont_status='pool') THEN lv.aantal ELSE 0 END) AS SumLvPool1
FROM academy
JOIN (SELECT DISTINCT cont_status FROM contacten) AS c
LEFT OUTER JOIN
(SELECT academy_id, cont_status, bron, count(*) as aantal
FROM academy_landingviews alv
LEFT OUTER JOIN contacten c ON c.id=alv.user_id
GROUP BY academy_id, cont_status) AS lv
ON academy.id=lv.academy_id and c.cont_status=lv.cont_status
WHERE id= '$academy_id'
GROUP BY id, titel, bron
id, titel, type, bron,
SUM(CASE WHEN (lv.cont_status='anoniem') THEN lv.aantal ELSE 0 END) AS SumLvAnoniem1,
SUM(CASE WHEN (lv.cont_status='koud') THEN lv.aantal ELSE 0 END) AS SumLvKoud1,
SUM(CASE WHEN (lv.cont_status='lead') THEN lv.aantal ELSE 0 END) AS SumLvLead1,
SUM(CASE WHEN (lv.cont_status='prospect') THEN lv.aantal ELSE 0 END) AS SumLvProspect1,
SUM(CASE WHEN (lv.cont_status='klant') THEN lv.aantal ELSE 0 END) AS SumLvKlant1,
SUM(CASE WHEN (lv.cont_status='pool') THEN lv.aantal ELSE 0 END) AS SumLvPool1
FROM academy
JOIN (SELECT DISTINCT cont_status FROM contacten) AS c
LEFT OUTER JOIN
(SELECT academy_id, cont_status, bron, count(*) as aantal
FROM academy_landingviews alv
LEFT OUTER JOIN contacten c ON c.id=alv.user_id
GROUP BY academy_id, cont_status) AS lv
ON academy.id=lv.academy_id and c.cont_status=lv.cont_status
WHERE id= '$academy_id'
GROUP BY id, titel, bron
Als ik nu $row['SumLvAnoniem1'] doe in een html tabel:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<table width="40%" >
<tr>
<td colspan="2">Landingviews door anoniem via <?php echo $row['bron']; ?></td>
<td colspan="2"><?php echo $row['SumLvAnoniem1']; ?></td>
</tr>
<tr>
<td colspan="2">Landingviews door koud via <?php echo $row['bron']; ?></td>
<td colspan="2"><?php echo $row['SumLvKoud1']; ?></td>
</tr>
</table>
<tr>
<td colspan="2">Landingviews door anoniem via <?php echo $row['bron']; ?></td>
<td colspan="2"><?php echo $row['SumLvAnoniem1']; ?></td>
</tr>
<tr>
<td colspan="2">Landingviews door koud via <?php echo $row['bron']; ?></td>
<td colspan="2"><?php echo $row['SumLvKoud1']; ?></td>
</tr>
</table>
Dan krijg ik telkens 2 resultaten bij de eerste <tr> en ook 2 resultaten bij de 2de <tr> maar dat is niet juist, ook de cijfers zijn niet juist. Van waar komt dat 2de cijfers (dat trouwens ook 0 is iedere keer)?
En de bron krijg ik ook niet te zien als ik $row['bron']; doe.
Gewijzigd op 14/12/2015 14:29:37 door Brecht S
In de subquery ontbreekt bron in GROUP BY (mijn fout)
In de omsluitende query heb je type in SELECT toegevoegd. Dit moet je weghalen of ook toevoegen bij GROUP BY onderaan.
Als jet goed is, is de uitkomst van de deze query iets als (ik heb type even weggelaten):
id titel bron SumLvAnoniem1 SumLvKoud1 SumLvLead1 SumLvProspect1 SumLvKlant1 SumLvPool1
1 T1 facebook 12 3 2 6 1 8
1 T1 website 8 12 3 5 5 2
enz
Ik zou deze dan ook in 1 <tr> weergeven, maar het kan ook in meerdere.
Probeer de query eens uit in iets als phpMyAdmin en kijk of je het gewenste resultaat krijgt.
Ik zou oppassen met de veldnaam type want dat is een gereserveerd woord in sql, je kunt beter een andere veldnaam kiezen als je dit veld nodig hebt.
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
id, titel, bron,
SUM(CASE WHEN (lv.cont_status='anoniem') THEN lv.aantal ELSE 0 END) AS SumLvAnoniem1,
SUM(CASE WHEN (lv.cont_status='koud') THEN lv.aantal ELSE 0 END) AS SumLvKoud1,
SUM(CASE WHEN (lv.cont_status='lead') THEN lv.aantal ELSE 0 END) AS SumLvLead1,
SUM(CASE WHEN (lv.cont_status='prospect') THEN lv.aantal ELSE 0 END) AS SumLvProspect1,
SUM(CASE WHEN (lv.cont_status='klant') THEN lv.aantal ELSE 0 END) AS SumLvKlant1,
SUM(CASE WHEN (lv.cont_status='pool') THEN lv.aantal ELSE 0 END) AS SumLvPool1
FROM academy
JOIN (SELECT DISTINCT cont_status FROM contacten) AS c
LEFT OUTER JOIN
(SELECT academy_id, cont_status, bron, count(*) as aantal
FROM academy_landingviews alv
LEFT OUTER JOIN contacten c ON c.id=alv.user_id
GROUP BY academy_id, cont_status, bron) AS lv
ON academy.id=lv.academy_id and c.cont_status=lv.cont_status
WHERE id= '$academy_id'
GROUP BY id, titel, bron
id, titel, bron,
SUM(CASE WHEN (lv.cont_status='anoniem') THEN lv.aantal ELSE 0 END) AS SumLvAnoniem1,
SUM(CASE WHEN (lv.cont_status='koud') THEN lv.aantal ELSE 0 END) AS SumLvKoud1,
SUM(CASE WHEN (lv.cont_status='lead') THEN lv.aantal ELSE 0 END) AS SumLvLead1,
SUM(CASE WHEN (lv.cont_status='prospect') THEN lv.aantal ELSE 0 END) AS SumLvProspect1,
SUM(CASE WHEN (lv.cont_status='klant') THEN lv.aantal ELSE 0 END) AS SumLvKlant1,
SUM(CASE WHEN (lv.cont_status='pool') THEN lv.aantal ELSE 0 END) AS SumLvPool1
FROM academy
JOIN (SELECT DISTINCT cont_status FROM contacten) AS c
LEFT OUTER JOIN
(SELECT academy_id, cont_status, bron, count(*) as aantal
FROM academy_landingviews alv
LEFT OUTER JOIN contacten c ON c.id=alv.user_id
GROUP BY academy_id, cont_status, bron) AS lv
ON academy.id=lv.academy_id and c.cont_status=lv.cont_status
WHERE id= '$academy_id'
GROUP BY id, titel, bron
Ik heb nog steeds dubbele waarden in de <tr>'s waarvan de bron niet is gekend. Uiteraard is er niet altijd een bron meegegeven. Of is dit hier verplicht?
Ik was even een test aan het doen en ik zie toch dat de cijfers precies wel juist zijn alleen is de weergave precies raar. Vb van een resultaat bij 1 ebook met id 11:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
11 - Landingviews door anoniem via 0
11 - Landingviews door koud via 0
11 - Landingviews door anoniem via 1
11 - Landingviews door koud via 0
11 - Landingviews door anoniem via facebook 2
11 - Landingviews door koud via facebook 0
11 - Landingviews door koud via 0
11 - Landingviews door anoniem via 1
11 - Landingviews door koud via 0
11 - Landingviews door anoniem via facebook 2
11 - Landingviews door koud via facebook 0
Gewijzigd op 14/12/2015 21:05:55 door Brecht S