2013-02-23 68 views
0

目前,我有以下查询工作:PHP MySQL的 - 列 'ID' 在IN/ALL/ANY查询是不明确的

$sql = $db->Query("SELECT a.id FROM surf a LEFT JOIN users b ON b.id = a.user LEFT JOIN surfed c ON c.user = '".$data['id']."' AND c.site = a.id WHERE a.active = '0' AND (b.coins >= a.cpc AND a.cpc >= '2') AND (c.site IS NULL AND a.user !='".$data['id']."')".$dbt_value." ORDER BY a.cpc DESC LIMIT 1"); 

但我想补充的后续和声明它:

AND `cpc`<='10' AND (`id` NOT IN (SELECT `site` FROM `surfed_site`)) 

所以我做它看起来像:

$sql = $db->Query("SELECT a.id FROM surf a LEFT JOIN users b ON b.id = a.user LEFT JOIN surfed c ON c.user = '".$data['id']."' AND c.site = a.id WHERE a.active = '0' AND (b.coins >= a.cpc AND a.cpc >= '2') AND `cpc`<='10' AND (`id` NOT IN (SELECT `site` FROM `surfed_site`)) AND (c.site IS NULL AND a.user !='".$data['id']."')".$dbt_value." ORDER BY a.cpc DESC LIMIT 1"); 

但后来我收到此消息:

IN/ALL/ANY子查询中的列'id'不明确

我的查询出了什么问题?

回答

5

尝试改变

AND `cpc`<='10' AND (`id` NOT IN (SELECT `site` FROM `surfed_site`)) 

AND `cpc`<='10' AND (`a.id` NOT IN (SELECT `site` FROM `surfed_site`)) 

你需要a.id,因为它不知道id列在表中引用其中。

+0

然后我收到:SQL错误:'IN/ALL/ANY子查询'中的未知列'a.id': – CustomNet 2013-02-23 15:50:01

1

该错误的原因是因为有多个表包含列ID。为了执行查询时,必须提供在列ID所在,以便服务器能够识别哪个表有关的表格,如

AND `cpc`<='10' AND (a.`id` NOT IN (SELECT `site` FROM `surfed_site`)) 

如果你的意思,你是比较ID从表surf

+0

没有ID来自'surfed_site'表我需要做些什么来使它从' surfed_site'? – CustomNet 2013-02-23 15:48:19

+0

让我先问一下,在当前查询中包含'ID'列的'surfed_site'之外还有哪些表?第二,你想用'surfed_site'上的'ID'做什么? – 2013-02-23 15:54:41

+0

所有人都有ID。我想检查从'surf'表中拉出的行的ID不是'surfed_site'表中的。 – CustomNet 2013-02-23 16:04:42

1

您必须指定所需的ida.id,b.id

+0

我应该用哪一个字母来检查'surfed_site'中的'id'列? – CustomNet 2013-02-23 15:53:56

+0

@Liam Gordon 尝试'AND \'cpc \'<='10'AND(\'a \'。''id \'NOT IN(SELECT \'site \'FROM \'surfed_site \'))''。 – 2013-02-23 16:19:09

0

另外我假设$数据包含转义数据(单引号)?如果不是这是第二个问题。

+0

当前查询完美工作,直到我添加额外的AND注释 – CustomNet 2013-02-23 15:53:31

+0

我的意思是如果“没有被转义,那么还有一个MySQL注入安全漏洞。 – 2013-02-23 15:55:49

+0

我将如何去检查? – CustomNet 2013-02-23 16:06:58