Php 如果条件1没有';不匹配

Php 如果条件1没有';不匹配,php,sql,subquery,union,where-clause,Php,Sql,Subquery,Union,Where Clause,我感到有点尴尬和羞愧,因为这听起来很简单。但这一次我的脑子都僵住了 如果第一个条件不匹配,我想得到条件的结果。当然,我可以在我的php中使用一个简单的if(!$request),但我想知道这是否不仅仅是直接尝试我的sql请求 我已经做了一个简单的OR,但当然这将只是返回两个结果到每个条件 SELECT * FROM `menu` WHERE (`id_shop` = $current_shop OR `id_shop` = 0) AND `id_lang` = 1 如果没有与$current\

我感到有点尴尬和羞愧,因为这听起来很简单。但这一次我的脑子都僵住了

如果第一个条件不匹配,我想得到条件的结果。当然,我可以在我的php中使用一个简单的
if(!$request)
,但我想知道这是否不仅仅是直接尝试我的sql请求

我已经做了一个简单的OR,但当然这将只是返回两个结果到每个条件

SELECT * FROM `menu` WHERE (`id_shop` = $current_shop OR `id_shop` = 0) AND `id_lang` = 1
如果没有与
$current\u shop
id对应的条目,我想得到那些
id\u shop
等于0的条目

如果没有与$current_shop id相关的条目,我希望得到id_shop等于0的条目

您可以使用
UNION ALL
NOT EXISTS
执行此操作:

SELECT * 
FROM `menu` 
WHERE `id_shop` = ? AND `id_lang` = 1
UNION ALL 
SELECT * 
FROM `menu` 
WHERE `id_lang` = 1
  AND `id_shop` = 0 
  AND NOT EXISTS (SELECT 1 FROM `menu` WHERE `id_shop` = ? AND `id_lang` = 1)
查询的第一个成员搜索具有给定参数的匹配项。当且仅当第一个成员未返回任何行时,第二个参数返回到
id\u shop
0

SELECT * FROM 'menu' WHERE ('id_shop' = $current_shop OR ('id_shop' = 0 AND 'id_shop' 
!= $current_shop)) AND 'id_lang' = 1
如果没有与$current_shop id相关的条目,我希望得到id_shop等于0的条目

您可以使用
UNION ALL
NOT EXISTS
执行此操作:

SELECT * 
FROM `menu` 
WHERE `id_shop` = ? AND `id_lang` = 1
UNION ALL 
SELECT * 
FROM `menu` 
WHERE `id_lang` = 1
  AND `id_shop` = 0 
  AND NOT EXISTS (SELECT 1 FROM `menu` WHERE `id_shop` = ? AND `id_lang` = 1)

查询的第一个成员搜索具有给定参数的匹配项。当且仅当第一个成员未返回任何行时,第二个参数返回到
id\u shop
0

它工作正常,看起来很优雅。我喜欢。而我对工会的一切都不了解:)它有效,而且看起来很优雅。我喜欢。我对工会一无所知:)对不起,我没看到你的答案。这是错误的。您将得到完全相同的结果<代码>=运算符不表示“如果不”,它表示“不”或“不等于”。所以基本上机器是这样读的
line1:id=to$current\u shop?对第2行:id=到$current\u shop吗?否,它是否等于0但不等于$current_shop?是的,正如我刚才看到的,在上一次测试中,它不等于$current_shop
很抱歉,我没有看到您的答案。这是错误的。您将得到完全相同的结果<代码>=运算符不表示“如果不”,它表示“不”或“不等于”。所以基本上机器是这样读的
line1:id=to$current\u shop?对第2行:id=到$current\u shop吗?否,它是否等于0但不等于$current_shop?是的,正如我刚才看到的,在上一次测试中,它不等于$current_shop
SELECT * FROM 'menu' WHERE ('id_shop' = $current_shop OR ('id_shop' = 0 AND 'id_shop' 
!= $current_shop)) AND 'id_lang' = 1