2013-02-23 62 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