webForumDet fria alternativet

Count()

7 svar · 459 visningar · startad av tronez

tronezMedlem sedan juli 2001657 inlägg
#1

Jag har 2 tabeller som jag skulle vilja få information ur båda två

Tabell 1:

id | url | userid
1 | https://www.test.com | 1
2 | https://www.test2.com | 1
3 | https://www.test3.com | 1

Tabell 2:

id | url | userid
1 | https://www.test.com | 1
1 | https://www.test2.com | 1
1 | https://www.test2.com | 1
1 | https://www.test1.com | 1

Ungefär så här ser de ut
Jag vill nu plocka ut information från de båda så att jag får följande utskrift:

url | träffar
https://www.test.com | 1
https://www.test2.com | 2
https://www.test1.com | 1
https://www.test3.com | 0

SELECT s.url, count(s.url) as hits 
FROM tabell1 as s 
INNER JOIN tabell2 as ad 
ON s.url = ad.url 
WHERE s.url!= '' AND s.userid = 1 
GROUP BY s.searchengine 
ORDER BY hits DESC

Problemet med denna är att jag inte får med de URL:er som inte får någon 'hits'

Hoppas att någon förstod min önskan.

Använder MySql

emissionMedlem sedan dec. 19996 095 inlägg
#2

Förstod kanske....

SELECT s.url, count(ad.url) as hits 
FROM 
(SELECT url,userid FROM tabell1 UNION SELECT url,userid FROM tabell2)
 as s 
LEFT JOIN tabell2 as ad 
ON s.url = ad.url 
WHERE s.url!= '' AND s.userid = 1 
GROUP BY s.url 
ORDER BY hits DESC
tronezMedlem sedan juli 2001657 inlägg
#3

tack, det funkade som jag ville, men jag tänkte slänga hit en följdfråga innan jag accpeterar svaret.

i Tabell2 kan det ibland komma en URL som jag inte vill räkna, hur ska man gå tillväga för att lösa det?

Försökte att lägga till i WHERE satsen att 'ad.url != 'en speciell url' men då visades den ändå, men inte alla andra resultat x(

LarsGMedlem sedan dec. 200012 465 inlägg
#4

Lägg villkoret i on.

tronezMedlem sedan juli 2001657 inlägg
#5

Med förra koden visades ett X antalet träffar i listan, men om jag nu gjorde som du sa LarsG så fick jag inga träffar, men den visas fortfarande i listan, vilket jag inte vill ha

Något mer tips?

tronezMedlem sedan juli 2001657 inlägg
#6

Löste det! :)

SELECT s.url, count(ad.url) as hits
FROM
(SELECT url,userid FROM tabell1 UNION SELECT url,userid FROM tabell2 WHERE url != 'www.test.com')
as s
LEFT JOIN tabell2 as ad
ON s.url = ad.url and ad.url != 'www.test.com'
WHERE s.url!= '' AND s.userid = 1
GROUP BY s.url
ORDER BY hits DESC

LarsGMedlem sedan dec. 200012 465 inlägg
#7

Borde inte villkoret vara på s.url då?

Jag förstår ju egentligen inte din datamodell och vad som är skillnaden mellan tabell1 och tabell2. Jag tror att det mesta skulle bli enklare om du rätade ut modellen på något sätt.

tronezMedlem sedan juli 2001657 inlägg
#8

Skulle vilha ställa en följdfråga.

SELECT s.url, count(ad.searchengine) as hits
FROM
  (SELECT url,cust_id
    FROM ad_coverage
      UNION
    SELECT searchengine,cust_id
    FROM statistics
    WHERE searchengine != 'www.test.com'
  ) as s
LEFT JOIN statistics as ad
ON s.url = ad.searchengine and ad.searchengine != 'www.test.com'
INNER JOIN ad_coverage as p ON
	p.url = s.url
WHERE s.url!= '' AND s.cust_id = 2
GROUP BY s.url
ORDER BY hits DESC

Denna kod genererar ungefär följande utskrift:

1. www.test1.com 45 hits
2. www.test2.com   4 hits
3. www.test3.com   0 hits
4. www.test4.com   0 hits

'

Saken är den att https://www.test2.com endast återfinns 2 gånger i databasen, jag kan inte förstå var den får de andra 2 ifrån. Det finns en annan URL som har 2 hits, men den vill jag inte visa eftersom den ej finns i Tabell 1. Enda förklaringen jag har är att dessa 2 lägger sig i test2.com träffarna, men jag fattar inte varför

Någon idé`?

Genererad på 379 ms · cache AV · v20260730165559-full.f96bc7eb