首先感谢您的帮助!我的问题是......如何创建一个SQL SELECT语句来选择存在某些条件/情况的所有内容。见下面的例子:
我希望SQL语句选择给定表中的所有内容WHERE $ userID(类型为INT的PHP变量)满足4个条件/案例中的任何一个
4个条件中的每一个: type1_id , type2_id , type3_id 和 type4_id 都是同桌。
如果说每个类型都放在不同的表格中,可以自由地描述如何做到这一点。
SELECT * FROM table_name WHERE if(type1_id > 0) { type1_id = '$userID' } elseif (type2_id > 0) { type2_id = '$userID' } elseif (type3_id > 0) { type3_id = '$userID' } elseif (type4_id > 0) { type4_id = '$userID' }
答案 0 :(得分:2)
尝试:
WHERE (type1_id > 0 AND type1_id = '$user_id')
OR (type2_id > 0 AND type2_id = '$user_id')
OR (type3_id > 0 AND type3_id ...
查看表格数据的选择会很有帮助,但这样可以确保满足这两个条件,但仍允许您检查多个“条件”。
答案 1 :(得分:2)
我更喜欢使用IN。
SELECT *
FROM table_name
WHERE '$UserID' IN (type1_id,type2_id,type3_id,type4_id)
答案 2 :(得分:1)
通常,使用OR
语句。
WHERE < one boolean statement >
OR < another boolean statement >
特别是对于你想要的东西,因为每个OR的内部看起来都一样,你可以使用CASE语句,如下所示:
where '$userID' = case when type1_id > 0 then type1_id
when type2_id > 0 then type2_id
...
end
当然,如果您不需要检查typeX_id > 0
那么@Apothosis建议,使用IN
是迄今为止最好的方法!
答案 3 :(得分:0)
select *
from tablename
where type1_id > 0 and type1_id = '$userID'
or type2_id > 0 and type2_id = '$userID'
or type3_id > 0 and type3_id = '$userID'
or type4_id > 0 and type4_id = '$userID'
是非常必要的elseif,或者总是只有一个typeN_id是&gt; 0?
如果elseif很重要:
select *
from tablename
where type1_id > 0 and type1_id = '$userID'
or type1_id <=0 and type2_id > 0 and type2_id = '$userID'
or type1_id <= 0 and type2_id <= 0 and type3_id > 0 and type3_id = '$userID'
or type1_id <= 0 and type2_id <= 0 and type3_id <= 0 and type4_id > 0 and type4_id = '$userID'
如果记录为所有typeN_id列的0值,会发生什么?在你的逻辑中,它将在结果中。
答案 4 :(得分:0)
很快就会提出一些建议,但首先是对您的问题的最直接和最直接的答案:
SELECT *
FROM table_name
WHERE
(type1_id > 0 and type1_id = '$userID')
OR
(type2_id > 0 and type2_id = '$userID')
OR
(type3_id > 0 and type3_id = '$userID')
OR
(type4_id > 0 and type4_id = '$userID')
现在,有一些问题:
>0
,然后等于字符串感觉很腥。这是什么数据类型?我想知道> 0
是否多余。如果它们不是真正需要的话,如果可以避免嵌套的AND / OR组合,它可能使您的查询更容易维护并具有更可靠的执行计划。但只有它们实际上是多余的。