2010-02-27 5 views
1

У меня есть следующая MySQL с двумя параметрами: $ catname и $ limit = 1. И он отлично работает.Как добавить инструкцию if в SQL?

SELECT P.*, C.Name AS CatName 
        FROM omc_product AS P 
        LEFT JOIN omc_category AS C 
        ON C.id = P.category_id 
        WHERE C.Name = '$catname' 
        AND p.status = 'active' 
        ORDER BY RAND() 
        LIMIT 0, $limit 

Теперь я хочу добавить еще один параметр $ order. $ заказ может быть либо

ОДЕР BY RAND()

или

ORDER BY product_order

в таблице omc_product.

Может ли кто-нибудь сказать мне, как написать этот запрос, пожалуйста?

Заранее спасибо.

+0

Каковы критерии выбирая один над другим? O, и: это также связано с PHP? Тогда вы должны пометить его соответствующим образом. –

ответ

1

Взятые из комментариев к this MySQL 5.0 справочной статьи:

Вы можете ORDER BY динамический параметр column_name, используя выражение CASE в предложении о SELECT заявлении ORDER BY:

CREATE PROCEDURE `orderby`(IN _orderby VARCHAR(50)) 
BEGIN 

    SELECT id, first_name, last_name, birthday 
    FROM table 
    ORDER BY 

    -- numeric columns 
    CASE _orderby WHEN 'id' THEN id END ASC, 
    CASE _orderby WHEN 'desc_ id' THEN id END DESC, 
    -- string columns 
    CASE _orderby WHEN 'first_name' THEN first_name WHEN 'last_name' THEN last_name END ASC, 
    CASE _orderby WHEN 'desc_first_name' THEN first_name WHEN 'desc_last_name' THEN last_name END DESC, 
    -- datetime columns 
    CASE _orderby WHEN 'birthday' THEN birthday END ASC, 
    CASE _orderby WHEN 'desc_ birthday' THEN birthday END DESC; 

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