Avatar billede tblaster Nybegynder
15. august 2007 - 12:45 Der er 6 kommentarer og
1 løsning

SQL - samle informaiton fra 2 tabeller

Hejsa

Jeg har brug for lidt hjælp med en sql streng.

Jeg har 2 tabeller:
Partners (ID, Side)
PartnerX (ID, PID, Dato)

Hvor Partners.ID = PartnerX.PID

Det jeg gerne vil er, at have en enkelt sql streng hvor jeg trækker alle posterne ud under Partners og samtidig får en information om antallet af poster under PartnersX. Så det er en sammenkædning af følgende 2 sql-streng jeg søger:

Sql = "SELECT * From Partners Where Side ='" & Side_Title & "'"
Sql = "SELECT count(*) as antal From PartnerX Where PID = =" & PID &

På forhånd tak.
Avatar billede fennec Nybegynder
15. august 2007 - 12:55 #1
sql = "SELECT p.id, p.side, count(px.id) as antal From Partners p left join PartnerX px on px.pId=p.ID Where p.Side ='" & Side_Title & "' group by p.id, p.side"
Avatar billede tblaster Nybegynder
15. august 2007 - 12:59 #2
Det giver følgende fejl:
ERROR: Ikke-lukket quote @ 151
Avatar billede fennec Nybegynder
15. august 2007 - 13:08 #3
Har du det på en linje?? E har delt det her. Det skal stå som en samlet linje.
Avatar billede tblaster Nybegynder
15. august 2007 - 13:29 #4
Min fejl, jeg havde fået kopier "-tegnet med ind i min mysql :-)

Det lader til at virke. Men jeg har brug for at den kun tæller de poster i PartnerX der er mindre end 7 dage gammel. Jeg har forsøgt med følgende:

Sql = "SELECT p.id, p.side, p.url, p.navn, p.OpretDato, count(px.id) As Antal From Partners p LEFT JOIN PartnerX px on px.pId=p.ID Where p.Side ='" & Side_Title & "' and px.Dato >= " & unudate(now() - 7) & " Group By p.id Order By Antal desc"

Men så får jeg åbenbart kun de poster ud hvor antal > 0. Uden dato undersøgelsen får jeg alle poster ud hvilket jeg også skal have.
Avatar billede fennec Nybegynder
15. august 2007 - 13:49 #5
Ok, den var svære... Det kan evt løses med at smide en NULL med på:

Sql = "SELECT p.id, p.side, p.url, p.navn, p.OpretDato, count(px.id) As Antal From Partners p LEFT JOIN PartnerX px on px.pId=p.ID Where p.Side ='" & Side_Title & "' and (px.Dato >= " & unudate(now() - 7) & " or px.Dato is NULL) Group By p.id Order By Antal desc"

Ellers skal du have gang i inner select (kun fuldt understøttet i version 5):
Sql = "SELECT *, (SELECT count(*) as antal From PartnerX Where PID=p.id where Dato >= " & unudate(now() - 7) & ") as antal From Partners p Where Side ='" & Side_Title & "'"

Hvad gør unudate funktionen??
Avatar billede tblaster Nybegynder
15. august 2007 - 13:51 #6
Den laver datoen om til antal sekunder.

Tak, det hjalp. Smid et svar!
Avatar billede fennec Nybegynder
15. august 2007 - 13:55 #7
.o) <-- One Eyed Jack
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