Avatar billede hoppe11 Nybegynder
09. marts 2008 - 01:20 Der er 4 kommentarer og
1 løsning

left join select

burde den her i princippet ikke virke?

SELECT *, INET_NTOA(ip) AS ip_oct, tmp.user_id
FROM $DB.$TABLE
LEFT JOIN
(
    SELECT user_id, COUNT(user_id) AS num
    FROM $DB2.log_login
    GROUP BY user_id
    ORDER BY num DESC
    LIMIT 1
) tmp ON tmp.ip_id=ip
ORDER BY time DESC
LIMIT 100

dog får jeg alligevel:
Unknown column 'tmp.ip_id' in 'on clause'
Avatar billede hoppe11 Nybegynder
09. marts 2008 - 01:22 #1
min left join select giver for sig selv fint et udtræk

SELECT user_id, COUNT(user_id) AS num
FROM $DB2.log_login
GROUP BY user_id
ORDER BY num DESC
LIMIT 1
Avatar billede Slettet bruger
09. marts 2008 - 02:04 #2
burde

) tmp ON tmp.ip_id=ip

ikke vaere

) AS tmp ON tmp.ip_id=ip

du laver jo en navngivning
Avatar billede hoppe11 Nybegynder
09. marts 2008 - 04:13 #3
man burde nok kunne undlade det? :)

men jeg tror jeg er kommet et skridt nærmere løsningen, for nu kommer der i det mindste et mere fornuftigt udtræk som giver mere mening

query:
-------------------------------------
SELECT tbl.*, INET_NTOA(tbl.ip) AS ip_oct, tmp.user_id
FROM $DB.$TABLE tbl
LEFT JOIN $DB2.ip ip ON ip.ip=tbl.ip
INNER JOIN
(
    SELECT ip_id, user_id, COUNT(user_id) AS num
    FROM $DB2.log_login
    GROUP BY user_id
    ORDER BY num DESC
    LIMIT 1
) tmp ON tmp.ip_id=ip.id
ORDER BY tbl.time DESC
LIMIT 100
-------------------------------------

Når man tager INNER JOIN SELECT for sig selv altså:

SELECT ip_id, user_id, COUNT(user_id) AS num
FROM $DB2.log_login
GROUP BY user_id
ORDER BY num DESC
LIMIT 1

giver den:

ip_id     user_id     num
21     12     2235

men når man tager hele queryen trækker den kun rækker ud hvor user_id=12 ?? man skulle tro der går noget galt hvor INNER JOIN SELECT skal kommunikere med yderliggende SELECT ??
Avatar billede hoppe11 Nybegynder
09. marts 2008 - 13:12 #4
og ligeledes hvis man kun tager den ydre select alene og sætter user_id til at udskrive ip.id bliver de rigtige (forskellige) id'er udskrevet??

SELECT tbl.*, INET_NTOA(tbl.ip) AS ip_oct, ip.id ASuser_id
FROM $DB.$TABLE tbl
LEFT JOIN $DB2.ip ip ON ip.ip=tbl.ip
ORDER BY tbl.time DESC
LIMIT 100

Jeg forstår simpelthen ikke hvad der er galt?
Avatar billede hoppe11 Nybegynder
22. december 2008 - 17:33 #5
lukker
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