webForumDet fria alternativet
Logga in / Bli medlem

Count()

Databaser & SQL

7 svar · 459 visningar · startad av tronez

Medlem sedan juli 2001728 inlägg
Trådstart#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

Medlem sedan dec. 19996 721 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
Medlem sedan juli 2001728 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(

Medlem sedan dec. 200012 464 inlägg
#4

Lägg villkoret i on.

Medlem sedan juli 2001728 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?

Medlem sedan juli 2001728 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

Medlem sedan dec. 200012 464 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.

Medlem sedan juli 2001728 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é`?

381 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
125 ms — deklarationer (db)
120 ms — hämta statistik (db)
131 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)