webForumDet fria alternativet
Logga in / Bli medlem

SP i mySql beter sig skumt.

Databaser & SQL

3 svar · 309 visningar · startad av Travoni

Medlem sedan okt. 20041 556 inlägg
Trådstart#1

Om jag kör denna procedur så sorterar den på b.bid första gången, sedan så sorterar den på b.bdate. Mysko tycker jag.

CREATE PROCEDURE `afromcat`(IN c_id tinyint(3),IN c_sort tinyint(1))
BEGIN

If c_sort = 1 or c_sort = 2 then

    SELECT b.bid,b.bdate,b.bheadline,c_sort FROM adverts b 
    INNER JOIN cat c ON b.bcat=c.cid 
    WHERE b.bcat = c_id
    ORDER BY c_sort DESC;

Else
    SELECT b.bid,b.bdate,b.bheadline,c_sort FROM adverts b 
    INNER JOIN cat c ON b.bcat=c.cid 
    WHERE b.bcat = c_id
    ORDER BY c_sort ASC;
End if;

END;

Call afromcat(2,2)

Medlem sedan dec. 19996 721 inlägg
#2

Har inte gjort detta i MySQL, men det borde lösas ungefär så här:

CREATE PROCEDURE `afromcat`(IN c_id tinyint(3),IN c_sort tinyint(1))
BEGIN

    SELECT b.bid,b.bdate,b.bheadline,c_sort FROM adverts b 
    INNER JOIN cat c ON b.bcat=c.cid 
    WHERE b.bcat = c_id
    ORDER BY CASE c_sort WHEN 1 THEN CAST(b.bid as varchar(50))
                                    WHEN 2 THEN CAST(b.bdate as varchar(50))
                                    ELSE b.bheadline END;

END;

Med reservation för lite fix...

Medlem sedan okt. 20041 556 inlägg
#3

Verkar inte funka med cast() i order by.
Får error när jag kör den. :(

Medlem sedan dec. 19996 721 inlägg
#4

Prova utan cast

254 ms totalt · 4 externa anrop · v20260731065814-full.50d4b5bd
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
121 ms — ändringar (db)