2011-07-26 69 views
0

在PHP中嵌套SQL查询似乎有些担心。 我需要一个SQL查询来填充Drupal表单中的选择选项,我使用了下面的查询。在PHP中嵌套SQL查询

SELECT data FROM webform_submitted_data WHERE nid = 1124 and cid = 4 and 
data not in (SELECT data FROM webform_submitted_data where nid = 1127 and cid = 11 group by data having COUNT(*) > 5) 

这个查询工作在phpMyAdmin完全正常,但是当我在一个PHP代码尝试一下(如下)使用db_query,这是行不通的(不返回任何内容)。

$array = array(); 
$sql = db_query("SELECT data FROM webform_submitted_data WHERE nid = 1124 and cid = 4 and data not in (SELECT data FROM webform_submitted_data where nid = 1127 and cid = 11 group by data having COUNT(*) > 5)"); 
while($row = db_fetch_object($sql)) { 
$array[$row->data] = $row->data; 
} 
return $array; 

任何人都可以请我纠正我的查询或代码有什么问题吗? 此外,有没有办法在PHP中实现这个查询?

+1

db_query不应该是mysql_query?说,因为你标记MySQL ... – Warface

+0

你能提供更多关于什么不起作用的细节吗?你有错误信息吗? –

+0

什么是“不工作”。你得到一个错误?奇/错/没有结果? –

回答

1

是否值得指出这两个查询是不一样的?

第一个查询,来自phpMyAdmin,使用AND NOT EXISTS (...subquery...)

第二次使用and data not in (... subquery ...)

意味着不同的行为。

EDIT

在Drupal的图6,在该webform_submitted_datadata字段是mediumtext字段。将其内容用作数组键可能不是一个好主意。如何改变你的查询是这样的:

$array = array(); 
$sql = db_query("SELECT data FROM webform_submitted_data WHERE nid = 1124 and cid = 4 and data not in (SELECT data FROM webform_submitted_data where nid = 1127 and cid = 11 group by data having COUNT(*) > 5)"); 
while($row = db_fetch_object($sql)) { 
    $array[] = $row->data; // <<<<----- updated array push 
} 
return $array; 

这样,你仍然可以得到结果的数组,但不必使用长字符串值作为重点,并可能覆盖重复。

+0

你说得对。但是,OP注意到结果并不完全符合预期,并提到在phpMyAdmin中运行的查询是可以的。因此,OP必须使用可识别的工作。 –

+0

[修改原来的帖子] 我很喜欢查询不匹配。这两个查询的意思是相同的..我只是试图看看它是否有效的PHP中。但事实并非如此。 – iRiddler

+0

谢谢指出! – Ryan

1

单挑,你没有使用相同的查询!正如你让我们知道第一个查询,其结果您正在寻找的一个,在PHP更改为您在phpMyAdmin运行实际查询:

$sql = db_query("SELECT data FROM webform_submitted_data WHERE nid = 1124 and cid = 4 and not EXISTS (SELECT data FROM webform_submitted_data where nid = 1127 and cid = 11 group by data having COUNT(*) > 5)"); 

更新

您注意的是,这两个查询应该工作,但没有人在工作。我想你说,(什么都不会返回)

被抛出任何错误

我看不出有任何理由不查询要工作。确保你连接到同一个数据库。

+0

[修改原来的帖子]我很抱歉查询不匹配。这两个查询的意思是相同的。我只是想看看它是否有效在PHP中。但事实并非如此。 既不存在也不在phpMyAdmin中运行良好。 – iRiddler

+0

我有点困惑......阿德里安·贝茨在他的回复中解释了错误,现在它工作正常。 原因:“webform_submitted_data中的数据字段是中文字段,将其内容用作数组键可能不是一个好主意。” – iRiddler

+0

太棒了!那么你应该接受贝茨的答案。我很高兴它解决了你的问题:) –