Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在MySQL中使用AND或不返回任何结果_Php_Mysql - Fatal编程技术网

Php 在MySQL中使用AND或不返回任何结果

Php 在MySQL中使用AND或不返回任何结果,php,mysql,Php,Mysql,我正在尝试查询MySQL数据库中的一个表 所以基本上,我需要根据表中一列的值进行查询。因此: 如果列A=值,且此ID位于值数组中 或列A

我正在尝试查询MySQL数据库中的一个表

所以基本上,我需要根据表中一列的值进行查询。因此:

如果列A=值,且此ID位于值数组中

或列A<值,且此ID位于值数组中

但是查询返回null,但是数据在数据库中

编辑:桌子上的一点背景和我想做的事

界面中的用户将选择一个业务区域。该业务区域可能有许多子区域(部门等),并且在这些区域内可能有许多用户分配给每个部门。因此,我将向这个查询传递一组用户和区域

如果assigned type为3,则该条目被分配给一个用户,因此我想检查该用户(ID)是否在数组中,因此:
r.assigned_type=3和r.assigned_ID in(2610226132261332613444749)

如果“分配类型”为1或2,因此小于3,则该条目将分配给一个区域(站点/部门)。因此我想检查区域(ID)是否在数组中,因此:
r.assigned_type<3和r.assigned_ID in(109011093710938109391094010941)

有时可能会有用户和部门的条目,这就是为什么我需要使用或来检查分配的用户和区域

我是否使用了正确的语法?我没有收到任何语法错误

SELECT `r`.`risk_id`, `r`.`assigned_type`, `r`.`risk_type_id`, `r`.`risk_name`, `r`.`next_review`, `r`.`last_review`, `r`.`status`, `a`.`area_name`, `u`.`first_name`, `u`.`last_name`
FROM `risk_assessments` `r`
LEFT JOIN `users` `u` ON `u`.`id` = `r`.`assigned_id`
LEFT JOIN `areas` `a` ON `a`.`area_id` = `r`.`assigned_id`
WHERE `r`.`org_id` = 78
AND `r`.`risk_type_id` = 10
AND `r`.`assigned` = '1'
AND `u`.`privilege_level` <= 7 
AND ((`r`.`assigned_type` = '3' AND `r`.`assigned_id` IN(26102,26132,26133,26134,44749))
OR (`r`.`assigned_type` < '3' AND `r`.`assigned_id` IN(10901,10937,10938,10939,10940,10941)))  
选择`r`.`risk\u id`、`r`.`assigned\u type`、`r`.`risk\u id`、`r`.`risk\u name`、`r`.`next\u review`、`r`.`last\u review`、`r`.`status`、`a`.`area\u name`、`u`.`first\u name`、`u`.`last\u name``
来自“风险评估”`r`
在'u'上左键连接'users''u'。'id'='r`.'assigned\u id`
左连接'a'上的'areas''a'。'area\u id`='r`.'assigned\u id``
其中`r`.`org\u id`=78
和'r`.'risk\u type\u id`=10
和'r'。'assigned`='1'

和'u`.'privilege\u level`只需在查询中进行简单的条件更改,即可根据给定的示例获得结果

以下是更新后的查询:

SELECT `r`.`risk_id`, `r`.`assigned_type`, `r`.`risk_type_id`, `r`.`risk_name`, `r`.`next_review`, `r`.`last_review`, `r`.`status`, `a`.`area_name`, `u`.`first_name`, `u`.`last_name`
FROM `risk_assessments` `r`
LEFT JOIN `users` `u` ON `u`.`id` = `r`.`assigned_id`
LEFT JOIN `areas` `a` ON `a`.`area_id` = `r`.`assigned_id`
WHERE `r`.`org_id` = 78
AND `r`.`risk_type_id` = 10
AND `r`.`assigned` = '1'
AND `u`.`privilege_level` <= 7 
AND `r`.`assigned_type` <= '3' 
AND `r`.`assigned_id` IN(10901,10937,10938,10939,10940,10941,26102,26132,26133,26134,44749)
选择`r`.`risk\u id`、`r`.`assigned\u type`、`r`.`risk\u id`、`r`.`risk\u name`、`r`.`next\u review`、`r`.`last\u review`、`r`.`status`、`a`.`area\u name`、`u`.`first\u name`、`u`.`last\u name``
来自“风险评估”`r`
在'u'上左键连接'users''u'。'id'='r`.'assigned\u id`
左连接'a'上的'areas''a'。'area\u id`='r`.'assigned\u id``
其中`r`.`org\u id`=78
和'r`.'risk\u type\u id`=10
和'r'。'assigned`='1'

和'u`.'privilege\u level`请检查您的加入条件:

LEFT JOIN `users` `u` ON `u`.`id` = `r`.`assigned_id`
LEFT JOIN `areas` `a` ON `a`.`area_id` = `r`.`assigned_id`
这似乎是错误的,因为两个表都使用相同的
r
分配的\u id
外键联接

应该是这样的:

LEFT JOIN `users` `u` ON `u`.`id` = `r`.`user_id` (foreign key for users table)
LEFT JOIN `areas` `a` ON `a`.`area_id` = `r`.`area_id` (foreign key for areas table)

您描述的逻辑与查询中的逻辑不一致,而查询中的逻辑可能不是您想要做的。在我的脑海中,你可能会遇到一个括号问题,尽管你应该清楚地告诉我们你的逻辑,以便有人能帮助你。你不能在代码中使用IF和ELSE条件来检查
分配的类型
,并在具有不同联接的条件下编写两个不同的查询吗?那么CASE呢,我可以在查询中使用CASE吗,根据列的值,如何基于同一查询中列的值使用IF语句。我甚至不认为这是可能的?好吧,但是如果有一次用户ID和区域ID是相同的,这就是为什么我需要独立地检查它们?我知道这可能不太可能发生,但我需要考虑在这种情况下,我相信这个查询会很好。AsigigndId是专栏。这是userID还是areaID取决于分配的类型列