mysql计数比较语句

时间:2011-12-07 09:28:59

标签: mysql

有没有更有效的方法来做到这一点而不计算两次?

即如果计数为0则返回警告图像字符串,否则返回计数。

IF(
  ((SELECT COUNT(pc.category_id) from product_categories pc WHERE pc.product_id = cp.ItemID) > 0),
  (SELECT COUNT(pc.category_id) from product_categories pc WHERE pc.product_id = cp.ItemID),
  "<img src=\"_imgs/warning.png\" alt=\"warning\"/>"
) AS category_count

4 个答案:

答案 0 :(得分:2)

使用变量。 (但我认为其结果可能会被查询缓存缓存。)

IF( @val:=(query here), @val, "other value" ) AS category_count

答案 1 :(得分:0)

您可以使用NULLIFCOALESCE的组合,例如

COALESCE( NULLIF((sub-query), 0), 'other value')

但是,您不应该在数据库查询中构建HTML。这意味着您不需要任何复杂的SQL,这将成为视图中的简单if语句。

答案 2 :(得分:0)

您也可以加入此表格,例如 -

SELECT
  cp.*,
  IF(pc.cnt > 0, pc.cnt, '<img src=\"_imgs/warning.png\" alt=\"warning\"/>')
FROM
  cp_table cp
  LEFT JOIN (
    SELECT product_id, COUNT(category_id) AS cnt FROM product_categories GROUP BY product_id
  ) pc
    ON pc.product_id = cp.ItemID

答案 3 :(得分:0)

简单就是使用COALESCE。当两个参数相同时,NULLIF返回null,并且当遇到NULL时,COALESCE帮助我们返回默认值。

select COALESCE(NULLIF(COUNT(pc.category_id),0),"<img src=\"_imgs/warning.png\" alt=\"warning\"/>") AS category_count