我有一个数据库表(MySQL),我正在运行一个简单的SELECT。在这个表中,我有3个字段,每个字段包含3个可能的值。在每种情况下,值都是相同的('无','在线','物理')。如果其中任何一个字段未设置为“none”,我想在结果中返回别名的true或false值。
在我返回结果集后,我可以很容易地在PHP中对此进行评估,但为了轻松地对结果进行排序,我宁愿在SELECT中生成true / false。所以目前结果行可能如下所示:
id: 1
trial_type_1: none
trial_type_2: online
trial_type_3: none
在这种情况下,我希望查询返回:
id: 1
trial: True
如果所有trial_type字段都设置为none,则它将返回试验值False。任何想法都非常感激,因为我真的不知道从哪里开始,甚至在网上搜索什么! :)
答案 0 :(得分:6)
我在其中使用了一个case语句,这是一个非常灵活的方法,非常有用。
select id,
(CASE WHEN trial_type_1 <> 'none' OR trial_type_2 <> 'none'
OR trial_type_3 <> 'none'
THEN 'True' ELSE 'False' END) as trial
FROM q3773072
然而,您可以将其作为一个简单的逻辑操作 - 可能更接近您想要的操作,如下所示:
SELECT id,
(trial_type_1 <> 'none' OR trial_type_2 <> 'none' OR trial_type_3 <> 'none' ) as Trial
from q3773072
执行此操作的正确方式当然是将多个trial_types存储在另一个表中 - 当您开始编号字段时,数据库架构需要更改的线索。您还应该设置另一个表来定义试验类型及其定义 - 即它们是否是真正的试验。
我可能会采用后一种方法,因为很有可能你将来会在某个时候添加另一种试用类型,如果你做得不好会很痛苦。
答案 1 :(得分:2)
这应该有效:
SELECT
id,
NOT (trial_type_1 IS NULL AND trial_type_2 IS NULL AND trial_type_3 IS NULL) AS trial
FROM ...
答案 2 :(得分:1)
您可以使用CASE:
SELECT ID, CASE WHEN trial_type_1='none' AND trial_type_2='none' AND trial_type_3='none' THEN 'false' ELSE 'true' END
FROM YourTable
答案 3 :(得分:0)
这可能有效:
SELECT id,
(trial_type_1 <> 'none'
OR trial_type_2 <> 'none'
OR trial_type_3 <> 'none') AS some_not_none
FROM ...
答案 4 :(得分:0)
您可以使用MySQL IF
statement:
SELECT
id,
IF (
(trial_type_1 != 'none'
OR trial_type_2 != 'none'
OR trial_type_3 != 'none'
), 1, 0
) AS trial
FROM ...