2010-02-27 8 views
1

J'ai un MySQL suivant avec deux paramètres, $ catname et $ limit = 1. Et ça fonctionne bien.Comment ajouter une instruction if dans 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 

Maintenant je veux ajouter un autre paramètre $ order. $ order peut être

ODER PAR RAND()

ou

ORDER BY product_order

dans le tableau omc_product.

Quelqu'un peut-il me dire comment écrire cette requête s'il vous plaît?

Merci d'avance.

+0

Quels sont les critères pour en choisir un au-dessus de l'autre? O, et: est-ce lié à PHP aussi? Vous devriez le marquer en conséquence alors. –

Répondre

1

Extrait des commentaires à this article de référence MySQL 5.0:

Vous pouvez ORDER BY un paramètre column_name dynamique en utilisant une expression CASE dans la clause ORDER BY de la déclaration SELECT:

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 
Questions connexes