Avatar billede ruma1974 Nybegynder
25. februar 2009 - 23:10 Der er 5 kommentarer

join table med rank fra stored procedure

Hej,

Jeg lavt følgende stored procedure i MySQL:

delimiter //;
create procedure pRankforSample (in param1 int)
begin
SELECT *, ratio as thisscore, (select count(distinct(ratio))+1 from tempratiotable where ratio > thisscore) as rank from tempratiotable where sample=param1;
end

som laver en query som indeholde rank for alle sample=param1:

Call pRankforSample(1);

giver

pkey sample ratio thisscore rank

I tablen "tempratiotable" har jeg også ratio for sample 2.

Mit spørgsmål er om jeg kan lave join på resultatet fra

Call pRankforSample(1);
Call pRankforSample(2);

v.hj.a pkey

Mvh,

Rune
Avatar billede arne_v Ekspert
26. februar 2009 - 05:54 #1
Nej. Man kan ikke joine 2 SP'er.

Hvis MySQL understøtter UDF'er som returnerer tabel, så kan du måske joine output fra 2 UDF'er.

Ellers lave en speciel query / SP for det.
Avatar billede ruma1974 Nybegynder
26. februar 2009 - 11:34 #2
Jeg har lavt en implementering hvor jeg laver ranking i mit hoved program men det er lidt langsomt da alle data skal sendes til hoved programmet. Jeg vil derfor helst at MySQL laver beregningen.

Jeg har ogsaa en implementering hvor jeg laver to temporary table som saa hele tiden skal slettes for hver ranking (ogsaa langsom).

Du har nok ret i at det bedste er at gaa igang med UDF.

MySQL understøtter UDF...
Avatar billede arne_v Ekspert
26. februar 2009 - 13:59 #3
Ja men understøtter MySQL en UDF som returnerer en table som kan bruges i en JOIN - det er spørgsmålet !
Avatar billede ruma1974 Nybegynder
26. februar 2009 - 14:33 #4
Ja det vil jeg mene:

http://www.mysqludf.org/lib_mysqludf_json/index.php

http://sourceforge.net/projects/mysql-udf/

Jeg har dog ikke kunne compilere nogen af dem med gcc paa win-XP.

Jeg faar en del bedskeder om hvilke include files compileren har brugt. Hvilket jeg gaar udfra er ok.

Derudover faar jeg fjelene nedenfor. Da jeg ikke er nogen C haj ved jeg ikke om disse fjel er vanskelige at rette paa. Det er nok i virkeligheden et C spørgsmål. 

  C:\MySQL\MySQLServer51\include\config-win.h In function `double rint(double)':
232 C:\MySQL\MySQLServer51\include\config-win.h redefinition of `double rint(double)'
367 C:\Dev-Cpp\include\stdio.h `FILE*_popen' redeclared as different kind of symbol
363 C:\Dev-Cpp\include\stdio.h previous declaration of `FILE* _popen(const char*, const char*)'
367 C:\Dev-Cpp\include\stdio.h declaration of `FILE*_popen'
363 C:\Dev-Cpp\include\stdio.h conflicts with previous declaration `FILE* _popen(const char*, const char*)'
367 C:\Dev-Cpp\include\stdio.h expected primary-expression before "const"
367 C:\Dev-Cpp\include\stdio.h expected `)' before "const"
367 C:\Dev-Cpp\include\stdio.h expected `)' before "const" 
601 C:\Dev-Cpp\include\math.h `double rint(double)' previously defined here
Avatar billede arne_v Ekspert
26. februar 2009 - 15:45 #5
Nu var det UDF i SQL og ikke i C jeg tænkte på.

:-)

Men det kan MySQL tilsyneladende ikke jævnfør:
  http://dev.mysql.com/doc/refman/5.1/en/faqs-stored-procs.html#qandaitem-24-4-1-14
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