25. januar 2003 - 01:55Der 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!
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
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.
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);"
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;"
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...
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;
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;
Det var da dejligt at jeg rent faktisk kunne hjælpe, selvom en union ikke kunne løse det.
Synes godt om
Ny brugerNybegynder
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.