Dynamische Order By
Marco
31/10/2009 09:41:00Wanneer er records uit onze database gehaald worden, moeten die op een bepaald gebied worden gesorteerd. Dat selecteren gebeurt via een stored procedure, en de te sorteren kolom wordt als parameter meegegeven:
Maar nu willen we dat de derde parameter 'asc_desc' aangeeft of de resultaten ascending of descending worden weergegeven. Dus 'ASC' of 'DESC' moet afhankelijk van die parameter worden geplaatst, hoe doen we dat zonder elke statement dubbel te hebben?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
DELIMITER $$
USE `mhmoever1_db2`$$
DROP PROCEDURE IF EXISTS `actie_get`$$
CREATE DEFINER=`mhmoever1`@`%` PROCEDURE `actie_get`(
sort_by VARCHAR(45),
asc_desc INT,
include_afgerond INT
)
BEGIN
CASE sort_by
WHEN 'Actiestatus' THEN SELECT * FROM acties WHERE afgerond = include_afgerond ORDER BY actiestatus_id DESC;
WHEN 'Omgeving' THEN SELECT * FROM acties WHERE afgerond = include_afgerond ORDER BY omgeving_id DESC;
WHEN 'Project' THEN SELECT * FROM acties WHERE afgerond = include_afgerond ORDER BY project_id DESC;
WHEN 'Gedelegeerd aan' THEN SELECT * FROM acties WHERE afgerond = include_afgerond ORDER BY gedelegeerd_aan DESC;
WHEN 'Datum actie' THEN SELECT * FROM acties WHERE afgerond = include_afgerond ORDER BY actie.datum_actie ASC;
ELSE SELECT * FROM acties WHERE afgerond = include_afgerond ORDER BY datum_aangepast DESC;
END CASE;
END$$
DELIMITER ;
USE `mhmoever1_db2`$$
DROP PROCEDURE IF EXISTS `actie_get`$$
CREATE DEFINER=`mhmoever1`@`%` PROCEDURE `actie_get`(
sort_by VARCHAR(45),
asc_desc INT,
include_afgerond INT
)
BEGIN
CASE sort_by
WHEN 'Actiestatus' THEN SELECT * FROM acties WHERE afgerond = include_afgerond ORDER BY actiestatus_id DESC;
WHEN 'Omgeving' THEN SELECT * FROM acties WHERE afgerond = include_afgerond ORDER BY omgeving_id DESC;
WHEN 'Project' THEN SELECT * FROM acties WHERE afgerond = include_afgerond ORDER BY project_id DESC;
WHEN 'Gedelegeerd aan' THEN SELECT * FROM acties WHERE afgerond = include_afgerond ORDER BY gedelegeerd_aan DESC;
WHEN 'Datum actie' THEN SELECT * FROM acties WHERE afgerond = include_afgerond ORDER BY actie.datum_actie ASC;
ELSE SELECT * FROM acties WHERE afgerond = include_afgerond ORDER BY datum_aangepast DESC;
END CASE;
END$$
DELIMITER ;
Maar nu willen we dat de derde parameter 'asc_desc' aangeeft of de resultaten ascending of descending worden weergegeven. Dus 'ASC' of 'DESC' moet afhankelijk van die parameter worden geplaatst, hoe doen we dat zonder elke statement dubbel te hebben?
Er zijn nog geen reacties op dit bericht.