【问题标题】:sql query if a value is 0sql查询值是否为0
【发布时间】:2015-12-13 10:19:59
【问题描述】:

这是我的查询:

SELECT f.id AS id, 
       c.city AS city,
       ca.category AS cat 
FROM following AS f 
     JOIN cities AS c ON f.city=c.id 
     JOIN categories AS ca ON f.category=ca.id 
WHERE f.member = $this->id

问题有时是 citycat 可以等于 0。如果它们等于 0,我不能让它们加入城市或类别表,因为表中没有 0 的值,也没有我想要一个吗?

所以基本上我想要上面的查询,但我想要:如果city!=0 加入城市表,如果cat!=0 加入类别表。

我不介意更改 PHP 还是 SQL,但我就是不知道如何实现。

【问题讨论】:

标签: php mysql


【解决方案1】:

尝试在查询中使用 LEFT JOIN

【讨论】:

    【解决方案2】:

    正确答案基于预期输出。

    如果您不希望在城市或类别为零的情况下从following 表中获取条目,那么您根本无需费心。当您使用 INNER JOINS 时,它们仅在找到具有给定城市 ID 或类别 ID 的记录时才从 following 表中获取数据。

    但是,如果您的要求是当 citycategory 值趋于 0 时需要显示空值,那么 LEFT JOIN 应该可以解决问题。

    SELECT f.id AS id, 
      IF(c.city IS NULL, 'NO CITY', c.city) AS city,
      IF(ca.category IS NULL, 'NO CATEGORY', ca.category) AS cat 
    FROM following AS f 
    LEFT JOIN cities AS c ON (f.city=c.id) 
    LEFT JOIN categories AS ca ON (f.category=ca.id)
    WHERE f.member = $this->id
    

    【讨论】:

      【解决方案3】:

      在应用连接条件之前使用 if 条件检查 city 和 cat 的值:

      SELECT f.id AS id, c.city AS city,ca.category AS cat 
      FROM following AS f 
      JOIN cities AS c ON if(f.city!=0,f.city=c.id,0=1)
      JOIN categories AS ca ON if(ca.id!=0,f.category=ca.id,0=1)
      

      【讨论】:

        猜你喜欢
        • 2021-03-02
        • 1970-01-01
        • 1970-01-01
        • 2010-09-07
        • 2012-12-28
        • 1970-01-01
        • 2021-05-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多