2013-03-19 5 views
2

J'ai cette requêterequête de sélection mysql conditionnelle basée sur la clause where

SELECT column1 FROM Table1 WHERE column1 LIKE CONCAT('%', :regex, '%') OR (column2 IS NOT NULL AND column2 LIKE CONCAT('%', :regex, '%') 

qui retourne toujours column1 valeur si un enregistrement de Table1 satisfait clause where. Mais ce que je veux, c'est que la requête renvoie la valeur column1 si la première partie LIKE CONCAT('%', :regex, '%') de la clause where est satisfaite, column2 la valeur si la deuxième partie (column2 IS NOT NULL AND column2 LIKE CONCAT('%', :regex, '%') est satisfaite. Comment modifier la requête pour obtenir ce résultat?

Répondre

3

Une option consiste à utiliser une instruction CASE:

SELECT 
    CASE 
     WHEN column1 LIKE CONCAT('%', :regex, '%') THEN column1 
     ELSE column2 
    END yourcolumn 
FROM Table1 
WHERE column1 LIKE CONCAT('%', :regex, '%') 
    OR (column2 IS NOT NULL AND column2 LIKE CONCAT('%', :regex, '%') 
+0

Grande, la requête fonctionne comme je voulais. Mais j'ai une autre question par rapport à votre réponse: avec votre requête, la même comparaison est effectuée deux fois, l'une sur select et l'autre sur l'où cluse. Est-il possible d'optimiser la requête avec un seul des deux? – LuckyStarr

Questions connexes