2012-09-15 3 views
0

Dans cette requête de jointure, je multiplie deux colonnes de tables différentes, premium & points. Ce que je veux arriver est que s'il n'y a pas de colonnes jointes dans le tableau premium le multiplicateur sera 1.multipliant deux colonnes, tables différentes ... une colonne null

ici est la requête

SELECT parent.*,(premiumtable.bid * pointstable.points) as total FROM strings parent 
     LEFT JOIN premium premiumtable on parent.sid=premiumtable.sid AND premiumtable.paid='1' 
     LEFT JOIN points pointstable on parent.sid=pointstable.`string-id` 
     WHERE parent.category=:category AND (parent.submittype='0' OR parent.submittype='3') GROUP BY parent.id ORDER BY total LIMIT 5 

Donc, si rien ne se joint au premiumtable au lieu de premiumtable.bid * pointstable.points il serait 1 * pointstable.points. Les premiumtable.bid agit comme un multiplicateur, si ce n'est pas présent, je voudrais total à l'égalité pointstable.points

Répondre

1

Essayez d'utiliser COALESCE:

SELECT parent.*, 
     (COALESCE(premiumtable.bid,1) * pointstable.points) as total 
FROM strings parent 
LEFT JOIN premium premiumtable 
    on parent.sid=premiumtable.sid AND premiumtable.paid='1' 
LEFT JOIN points pointstable 
    on parent.sid=pointstable.`string-id` 
WHERE parent.category=:category 
AND (parent.submittype='0' OR parent.submittype='3') 
GROUP BY parent.id 
ORDER BY total LIMIT 5 
2

Utilisez une déclaration case:

SELECT parent.*, 
     case when premiumtable.bid is null 
      then pointstable.points 
      else premiumtable.bid * pointstable.points 
     end as total 
FROM strings parent 
LEFT JOIN premium premiumtable on parent.sid=premiumtable.sid AND premiumtable.paid='1' 
LEFT JOIN points pointstable on parent.sid=pointstable.`string-id` 
WHERE parent.category=:category 
AND (parent.submittype='0' OR parent.submittype='3') 
GROUP BY parent.id 
ORDER BY total 
LIMIT 5 
+0

Coalesce semble comme si c'était plus propre ... –

+0

Tous ceux qui ont programmé dans n'importe quel langage de programmation peuvent comprendre la syntaxe de 'CASE'. Tous ceux qui ont déjà croisé 'COALESCE' ont été contraints de chercher la signification et la syntaxe. Que diriez-vous de 'ISNULL', qui pourrait également être compris? –

Questions connexes