繁体   English   中英

使用PHP Mysql,如何从sql查询中的多个OR条件中满足哪个条件?

[英]Using PHP Mysql how can I get which condition satisfied from multiple OR condition in a sql query?

我有以下查询:

$sql = "SELECT * 
        FROM `tbl_user` 
        WHERE `Code1`='114' 
        OR `Code2`='114' 
        OR `Code3`='114' 
        OR `Code4`='114' 
        OR `Code5`='114'";

我能找到满足条件的列Code1Code2Code3由... array_search返回结果的。

但是我还能得到其他任何简单的解决方案吗?

您可以使用FIELD函数获得所需的结果:

SELECT *,
       FIELD(114, code1, code2, code3, code4, code5) AS code
FROM tbl_user
WHERE FIELD(114, code1, code2, code3, code4, code5) > 0

输出(对于我的演示 ):

code1   code2   code3   code4   code5   code
45      32      114     5       12      3
114     34      98      93      12      1
57      114     48      23      72      2
12      75      8       3       114     5
49      4       198     114     52      4

请注意,如果您想要一个字符串列名而不是一个数字,则可以使用

CONCAT('Code', FIELD(114, code1, code2, code3, code4, code5)) AS code

您可以使用IN谓词,如下所示

SELECT * FROM tbl_user WHERE 114 IN(Code1, Code2, Code3, Code4, Code5);

文献资料

也许这就是您想要的?

SELECT col FROM (
   SELECT "Code1" AS col, Code1 AS value FROM tbl_user
   UNION ALL SELECT "Code2", Code2 FROM tbl_user
   UNION ALL SELECT "Code3", Code3 FROM tbl_user
) allValues
WHERE value=114;

参考: https : //stackoverflow.com/a/2940786/2693543

如果您需要选择列名,则

 SELECT * FROM tbl_user.COLUMNS WHERE 114 IN(Code1, Code2, Code3, Code4, Code5);

最好的方法是使用INFORMATION_SCHEMA元数据虚拟数据库。 特别是INFORMATION_SCHEMA.COLUMNS表...

INFORMATION_SCHEMA选择COLUMN_NAME COLUMNS WHERE TABLE_SCHEMA = 'yourdatabasename' AND TABLE_NAME = 'yourtablename'; 它非常强大,可以为您提供大量信息,而无需解析文本(例如列类型,列是否可为空,最大列大小,字符集等)...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM