2014-05-26 4 views
0

Я использую подготовленные операторы в MySQL с условным предложением «order by». С помощью '?' и переменные не работают с такими вещами, как заказы, поэтому я решил сделать это по-другому. Я задал условия, но это намного больше кода. Может быть, есть и другой способ уменьшить код и просто изменить аргументы «порядок»?MySQL подготовил операторы с порядком по предложению

IF sorting_column_index = 1 and sorting_column_mode = 0 
     THEN PREPARE STMT FROM 'SELECT a.oid as \'oid\', 
     ... 

     FROM table as a 

     ... 
     order by numero_annee desc LIMIT ?, ?'; 
     EXECUTE STMT USING @skip, @ROWS; 
END IF; 

IF sorting_column_index = 2 and sorting_column_mode = 1 
     THEN PREPARE STMT FROM 'SELECT a.oid as \'oid\', 
     ... 

     FROM table as a 

     ... 
     order by numero_ordre asc LIMIT ?, ?'; 
     EXECUTE STMT USING @skip, @ROWS; 
END IF; 
... 

ответ

2

попробовать что-то вроде этого, не используя параметры Asc/убыв но строить свою строку запроса:

SET @sort_order = 'desc'; 
SET @my_limit = 5; 
SET @sql = CONCAT('SELECT whatever FROM whatever ORDER BY col1 ', @sort_order, ' LIMIT ?;'); 
PREPARE stmt FROM @sql; 
EXECUTE stmt USING @my_limit; 
DEALLOCATE PREPARE stmt; 
+0

Usefull и помогает мне сэкономить много свободного пространства х) – boski

Смежные вопросы