Avatar billede beorndesign Nybegynder
25. januar 2003 - 01:55 Der er 10 kommentarer og
1 løsning

Sorter på hits med to databaser?

Jeg er ved at lave et link system, som viser antal hits de sidste 14 dage via 2 databaser. Det virker også fint nok, bortset fra, hvis et link ikke har haft nogle hits - for så er der ikke en record i den ene databasen for det link, og så bliver linket ikke vist!

Så er spørgsmålet: Kan det lade sig gøre at lave nedenstående SQL sætning om, så de records i 'portal_links' uden hits, alligevel bliver vist? Eller er det nemmeste/bedste, at sørge for at der for hvert link hele tiden er en record, blot hvor hits=0?


SELECT portal_links.*, SUM(portal_statistik.hits) AS totalHits FROM portal_links, portal_statistik WHERE (portal_links.kategori = 1 AND portal_links.id = portal_statistik.link_id) GROUP BY portal_links.id ORDER BY totalHits DESC;

Hvis der nogle der har et forslag til en SQL-sætning, er der point!
Avatar billede websmith Nybegynder
25. januar 2003 - 15:57 #1
SELECT portal_links.*, SUM(portal_statistik.hits) AS totalHits FROM portal_links, portal_statistik WHERE (portal_links.kategori = 1 AND portal_links.id = portal_statistik.link_id) GROUP BY portal_links.id ORDER BY totalHits DESC;

UNION

SELECT portal_links.*, 0 AS totalHits FROM portal_links, portal_statistik WHERE (portal_links.kategori = 1 AND portal_links.id = portal_statistik.link_id and portal_statistik.link_id Is NULL) GROUP BY portal_links.id;


Det skulle gerne lægge de to queries sammen dem med hits, og dem uden,med 0 som antal hits.
Avatar billede websmith Nybegynder
25. januar 2003 - 15:57 #2
Det skulle egentligt have været et svar
Avatar billede beorndesign Nybegynder
26. januar 2003 - 20:22 #3
Jeg har sat følgende SQL sætning ind, men får en fejlmeddelelse:

ADODB.Recordset.1 error '80004005'

SQLState: 42000
Native Error Code: 1064
[TCX][MyODBC]You have an error in your SQL syntax near '(SELECT portal_links.*, SUM(portal_statistik.hits) AS totalHits FROM portal_link' at line 1


/grafisk/list_top.asp, line 30

SQL-sætning:
Recordset1.Source = "(SELECT portal_links.*, SUM(portal_statistik.hits) AS totalHits FROM portal_links, portal_statistik WHERE (portal_links.kategori = 1 AND portal_links.id = portal_statistik.link_id) GROUP BY portal_links.id ORDER BY totalHits DESC) UNION (SELECT portal_links.*, 0 AS totalHits2 FROM portal_links, portal_statistik WHERE (portal_links.kategori = 1 AND portal_links.id = portal_statistik.link_id and portal_statistik.link_id Is NULL) GROUP BY portal_links.id);"
Avatar billede websmith Nybegynder
26. januar 2003 - 20:48 #4
Du kan ikke bruge select portal_links.* med en group by, du skal skrive de feltnavne du vil have, og så også groupe med dem,

Dvs

select portal_links.id, portal_links.felt1 ...... ORDER BY portal_links.id, portal_links.felt1

Besværligt, men sådan er det.
Prøv det og se om det ikke hjælper
Avatar billede beorndesign Nybegynder
27. januar 2003 - 19:11 #5
Jeg får stadig fejl:

You have an error in your SQL syntax near 'UNION SELECT portal_links.id, portal_links.navn, portal_links.beskrivelse, porta' at line 1

Og nu ser min sætning sådan ud:

Recordset1.Source = "SELECT portal_links.id, portal_links.navn, portal_links.beskrivelse, portal_links.ord, portal_links.link, SUM(portal_statistik.hits) AS totalHits FROM portal_links, portal_statistik WHERE (portal_links.kategori = '" & Recordset1__var1 & "' AND portal_links.id = portal_statistik.link_id) GROUP BY portal_links.id, portal_links.navn, portal_links.beskrivelse, portal_links.ord, portal_links.link, portal_statistik.hits ORDER BY totalHits DESC UNION SELECT portal_links.id, portal_links.navn, portal_links.beskrivelse, portal_links.ord, portal_links.link, 0 AS totalHits FROM portal_links, portal_statistik WHERE (portal_links.kategori = '" & Recordset1__var1 & "' AND portal_links.id = portal_statistik.link_id AND portal_statistik.link_id IS NULL) GROUP BY portal_links.id, portal_links.navn, portal_links.beskrivelse, portal_links.ord, portal_links.link, portal_statistik.hits;"
Avatar billede beorndesign Nybegynder
27. januar 2003 - 19:20 #6
Kan det have noget at gøre med at jeg kører MySQL version 3.23.49?
Avatar billede websmith Nybegynder
27. januar 2003 - 20:36 #7
Det tror jeg ikke..

Prøv at skrive den komplette SQL sætning ud, og så post den her. Dvs. efter at du har sat den sammen med dine variabler
Avatar billede beorndesign Nybegynder
27. januar 2003 - 21:01 #8
Den komplette SQL sætning er lige ovenover.
Men nu har jeg kigget lidt på http://www.mysql.com/doc/en/UNION.html, hvor der står at UNION først er impleteret i ver. 4.0 - så jeg må løse problemet på anden vis! Jeg takker for hjælpen, som jeg er sikker på havde virket hvis bare...
Avatar billede websmith Nybegynder
27. januar 2003 - 21:09 #9
Jeg tror faktisk at du kan klare det med en right join også...

Prøv denne. Måske skal du lave om på dit join

SELECT portal_links.id, portal_links.navn, portal_links.beskrivelse, portal_links.ord, portal_links.link, SUM(portal_statistik.hits) AS totalHits FROM portal_links, portal_statistik
right join portal_links on portal_statistik.link_id portal_links.id) where portal_links.kategori = 1
GROUP BY portal_links.id ORDER BY totalHits DESC;
Avatar billede beorndesign Nybegynder
27. januar 2003 - 22:28 #10
Det virker sgu :-) Tak for hjælpen! Hvis nogen skulle være interreseret, kommer den endelige SQL-sætning her:

SELECT portal_links.id, portal_links.navn, portal_links.beskrivelse, portal_links.ord, portal_links.link, SUM(portal_statistik.hits) AS totalHits FROM portal_statistik RIGHT JOIN portal_links ON portal_statistik.link_id = portal_links.id WHERE portal_links.kategori = '1' GROUP BY portal_links.id ORDER BY totalHits DESC;
Avatar billede websmith Nybegynder
28. januar 2003 - 12:02 #11
Det var da dejligt at jeg rent faktisk kunne hjælpe, selvom en union ikke kunne løse det.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester