【问题标题】:Getting field name from MySQL within a query where a value is not zero在值不为零的查询中从 MySQL 获取字段名称
【发布时间】:2016-09-13 13:45:58
【问题描述】:

我有一个表,其中包含多个类别,然后是针对这些值的值 - 我需要尝试从该表(仅使用 MySQL)中提取值不为零的类别名称和值本身.

例如:

ID   car   phone   gym   pension
1    200   15      12    20
2    0     15      12    25
3    0     0       0     30
4    0     0       0     0
5    150   20      12    0

在上面我需要得到类似的东西:

1 Car     200
1 Phone   15
1 Gym     12
1 Pension 20
2 Phone   15
2 Gym     12
2 Pension 25
3 Pension 30
5 Car     150
5 Phone   20
5 Gym     12

以下查询返回正确的 ID 和值,但它也返回零值(ID 4 除外)而不是类别名称:

SELECT id, car, phone, gym, pension from benefits where (car!=0 OR phone!=0 OR gym!=0 OR pension!=0)

我可以在 PHP 中执行此操作,但是否可以仅在 MySQL 中执行此操作?

【问题讨论】:

  • (car!=0 OR phone!=0 OR gym!=0 OR pension!=0)而不是(car!=0 AND phone!=0 AND gym!=0 AND pension!=0)的原因
  • 因为那不是他想要的……
  • imo,可悲的是,您需要的输出是它最初应该如何保存在数据库中。 ;-/
  • @RyanVincent 很高兴,我同意你的看法
  • @RyanVincent 很不高兴我也同意你的观点,但事实并非如此:(

标签: mysql


【解决方案1】:

您可以使用UNION ALL

SELECT id, car AS col
FROM benefits
WHERE car!=0

UNION ALL

SELECT id, phone AS col
FROM benefits
WHERE phone!=0

UNION ALL

SELECT id, gym AS col
FROM benefits
WHERE gym!=0

UNION ALL

SELECT id, pension AS col
FROM benefits
WHERE pension !=0

【讨论】:

    【解决方案2】:

    我认为实现这一目标的最简单方法是使用 UNION ALL ,每列一次:

    SELECT id,'Car' as val , car
    FROM benefits WHERE car <> 0
    
    UNION ALL
    
    SELECT id,'Phone' as val , phone
    FROM benefits WHERE phone <> 0
    
    UNION ALL
    
    SELECT id,'Car' as val , car
    FROM benefits WHERE car <> 0
    
    UNION ALL
    
    SELECT id,'Gym' as val , Gym
    FROM benefits WHERE Gym<> 0
    
    UNION ALL
    
    SELECT id,'Pension' as val , Pension 
    FROM benefits WHERE Pension <> 0
    
    order by id
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-24
      • 1970-01-01
      • 1970-01-01
      • 2017-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多