Avatar billede tsearexkonge Nybegynder
19. september 2003 - 20:46 Der er 30 kommentarer og
2 løsninger

Top 5 links join tabeller?

Hejsa
Jeg har 2 tabeller med links, i hver tabel er der et felt som hedder hits. Jeg vil gerne have top 5 af de mest besøgte links(hits) hvordan lægger jeg de 2 tabeller sammen og finder dem med de højeste hits?

Her min kode
sql = "select * from links1,links2 order by hits DESC limit 0,5 "
Avatar billede avlund Nybegynder
19. september 2003 - 20:49 #1
Du har ikke mulighed for at slå de to tabeller sammen permanent?
Avatar billede kr-data Nybegynder
19. september 2003 - 20:49 #2
Ikke for noget men jeg ville holde de to tabeller adskilt om muligt, men ellers må du kunne lave en links3, hvor du samler alle linksne i og så henter dem derfra!
Avatar billede tsearexkonge Nybegynder
19. september 2003 - 20:52 #3
Det kunne jeg godt men jeg ville hellere være fri.
Avatar billede arne_v Ekspert
19. september 2003 - 20:52 #4
Hvis du bruger MySQL 4.x så prøv:

((select * from links1) union (select * from links2)) order by hits DESC limit 0,5
Avatar billede tsearexkonge Nybegynder
19. september 2003 - 20:53 #5
Det var til avlund svar
Avatar billede arne_v Ekspert
19. september 2003 - 20:53 #6
Jeg har ikke testet men som jeg læser docs:
  http://www.mysql.com/doc/en/UNION.html
burde det virke.
Avatar billede arne_v Ekspert
19. september 2003 - 20:54 #7
Evt. uden parenteser:

(select * from links1) union (select * from links2) order by hits DESC limit 0,5
Avatar billede tsearexkonge Nybegynder
19. september 2003 - 20:56 #8
Er det sådan du mener arne v?

sql = ((select * from links) union (select * from links_swe)) order by hits DESC limit 0,5
Avatar billede arne_v Ekspert
19. september 2003 - 20:59 #9
Ja.

Der skal vel "" omkring ligesom i dit spørgsmål.

Og jeg er ikke helt sikker på de yderste parenteser.
Avatar billede tsearexkonge Nybegynder
19. september 2003 - 20:59 #10
Jeg får en Syntax error  ved select når jeg bruger:
sql = (select * from links1) union (select * from links2) order by hits DESC limit 0,5
Avatar billede avlund Nybegynder
19. september 2003 - 21:01 #11
UNION virker, som Arne skrev, også i version 4.x.

Er der en god grund til at du ikke har dem permanent slået sammen? Det virker nemlig som en frygtelig redundant måde at lave tingene på.
Avatar billede tsearexkonge Nybegynder
19. september 2003 - 21:03 #12
You have an error in your SQL syntax near '(select * from links) union (select * from links_swe) order by hits DESC limit 0'

sql = "(select * from links) union (select * from links_swe) order by hits DESC limit 0,5)"
Avatar billede tsearexkonge Nybegynder
19. september 2003 - 21:04 #13
@avlund
Jeg synes bare at det er mere overskueligt når de er i flere tabeller
Avatar billede arne_v Ekspert
19. september 2003 - 21:04 #14
Der er da ihvertfald en parentes for meget til sidst.
Avatar billede avlund Nybegynder
19. september 2003 - 21:05 #15
Hmm, det er nok fordi du ikke har defineret fra hvilken tabel "hits" skal komme fra.

Du kommer ikke udenom at lave en subselect eller en midlertidig tabel.
Avatar billede avlund Nybegynder
19. september 2003 - 21:06 #16
Well, ingen databaseadministrator ville nogensinde lave den slags i mere end én tabel. Normal praksis er at samle dem i én og adskille dem med en typebenævnelse.
Avatar billede arne_v Ekspert
19. september 2003 - 21:07 #17
Det ligner altså meget det eksempel fra MySQL og de bruger bare det
felt navn der er i begge tabeller uden at angive noget særligt.
Avatar billede tsearexkonge Nybegynder
19. september 2003 - 21:08 #18
sql = "(select * from links) union (select * from links_swe) order by hits DESC limit 0,5"

Giver også fejl
Avatar billede avlund Nybegynder
19. september 2003 - 21:08 #19
Lav to queries:

CREATE TEMPORARY TABLE t1 ( SELECT * FROM links) UNION (SELECT * FROM links_swe)

SELECT * FROM t1 ORDER BY hits DESC LIMIT 0,5
Avatar billede arne_v Ekspert
19. september 2003 - 21:08 #20
Jeg ville også ligge dem i en tabel.

Men det er ikke min database.
Avatar billede avlund Nybegynder
19. september 2003 - 21:09 #21
Udfør dem så én ad gangen. Men, altså, igen, jeg vil på det kraftigste opfordre dig til at samle tabellerne i én fra starten af.
Avatar billede tsearexkonge Nybegynder
19. september 2003 - 21:16 #22
Jeg sætte pris på jeres råd og det kan da også være at jeg ender med at gøre som i siger.

avlund er det sådan her du mener?
sql1 = "CREATE TEMPORARY TABLE t1 ( SELECT * FROM links) UNION (SELECT * FROM links_swe)"
set dbrs=objconn.execute (sql1)


sql = "SELECT * FROM t1 ORDER BY hits DESC LIMIT 0,5"
set dbrs=objconn.execute (sql)

I må lige bære over med mig jeg er lidt ny i det her.
Avatar billede tsearexkonge Nybegynder
19. september 2003 - 21:30 #23
Kan man lægge alle mine links tabelle sammen med en kommando til en ny tabel
Avatar billede avlund Nybegynder
19. september 2003 - 21:30 #24
Yes, du udfører de to linier som hver en query. Er glad for at du overvejer at tage vores råd til dig i øvrigt.
Avatar billede tsearexkonge Nybegynder
19. september 2003 - 21:37 #25
Jeg kan ikke få det til at virke, jeg tror at jeg gør som du siger og lægger det hele i en tabel.

Kan man lægge alle mine links tabelle sammen med en kommando til en ny tabel?
Avatar billede arne_v Ekspert
19. september 2003 - 21:39 #26
Ja.

Samme SQL bare uden TEMPORARY burde gøre det.

[men hvis temporary ikke virker så gør det andet nok heller ikke]
Avatar billede tsearexkonge Nybegynder
19. september 2003 - 21:42 #27
Ok i skal have tak for jeres hjælp og jeres tid.


Er det ikke rimeligt at i deler point? hvis det er så smid lige et svar arne v
Avatar billede arne_v Ekspert
19. september 2003 - 21:44 #28
Ellers er MyODBC + MS Access et glimrende tool til nemt at copy paste data.
Avatar billede arne_v Ekspert
19. september 2003 - 21:45 #29
En anden mulighed for at merge data er en af gangen med:

INSERT INTO tiltabel SELECT * FROM fratabel;
Avatar billede avlund Nybegynder
19. september 2003 - 21:47 #30
Husk, når du samler dem i én tabel, at lave et ekstra felt kaldet "linkType" el. lign., så du kan kende forskel på de to typer link (hvad der var i hhv. den ene og den anden tabel).
Avatar billede arne_v Ekspert
19. september 2003 - 21:50 #31
Til det sidste er INSERT INTO .. SELECT ... od, fordi man kan selecte
en konstant i SELECT delen.
Avatar billede tsearexkonge Nybegynder
19. september 2003 - 21:58 #32
Tak for alle jeres råd! nu vil jeg over og se noget tv godnat
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