Php SQL:将EXISTS()与其他命令一起使用

Php SQL:将EXISTS()与其他命令一起使用,php,mysql,sql,Php,Mysql,Sql,我有以下SQL代码: SELECT m.email FROM members as m WHERE exists ( select * from posts as p where p.email = m.email ) order by ads desc 我想在exists之前添加另一个语句,以便 SELECT m.email FROM members as m WHERE (m.ads<>0) and exists ( select * from posts as

我有以下SQL代码:

SELECT m.email
FROM members as m
WHERE exists 
(
select * 
from posts as p
where p.email = m.email
)
order by ads desc
我想在exists之前添加另一个语句,以便

SELECT m.email
FROM members as m
WHERE 
(m.ads<>0) 
and 
exists 
(
select * 
from posts as p
where p.email = m.email
)
order by ads desc
但是它不起作用,就像ads'0',ads'0',m.ads0等一样

为什么你认为它不起作用

我的意思是,当我添加一行“ads0”时,查询结果没有变化,就好像我没有输入这一行一样。
如果我添加一行“ads=0”,它将给出空结果,就好像没有任何值为零的字段实际存在一样

您应该能够向WHERE语句中添加任意数量的逻辑子句

假设members.ads是整数数据类型

SELECT m.email
FROM members m
WHERE m.ads <> 0
AND EXISTS (
    SELECT 1
    FROM posts p
    WHERE p.email = m.email
)
ORDER BY m.ads DESC

您应该能够使用显示的EXISTS。当然,您也可以将其编写为联接:

SELECT DISTINCT m.email
  FROM members AS m
  JOIN posts AS p ON p.email = m.email
 WHERE (m.ads<>0) 
 ORDER BY ads DESC
或者,您可以决定使用子查询来下推“DISTINCT”操作:

SELECT m.email
  FROM members AS m
  JOIN (SELECT DISTINCT p.email FROM posts AS p) AS q ON q.email = m.email
 WHERE (m.ads<>0) 
 ORDER BY ads DESC
在members表中,每个单独的电子邮件地址最多只能有一个结果;如果您允许多个成员共享一个电子邮件地址,您可能仍然需要在外部查询上使用一个独特的名称


但是,为了重申开场白,您应该能够将EXISTS运算符与其他子句一起使用,正如您所示。

Define不起作用。您是否收到任何错误消息?那么您的查询或数据是错误的,您可能可以从问题中完全删除EXISTS。您是否仅尝试了ADS0条件?将事情缩小到最小的测试用例是一项关键的调试技术。听起来好像没有ads==0的记录和POST中的匹配记录