在PHP中嵌套SQL查询

时间:2011-07-26 20:51:54

标签: php mysql sql drupal

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

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中运行得很好,但是当我使用db_query在PHP代码(下面给出)中尝试它时,它不起作用(没有返回任何内容)。

$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中实现这个查询?

2 个答案:

答案 0 :(得分: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)");

<强>更新

您注意到这两个查询都应该有效,但没有一个有效。我假设你没有提出任何错误

  

(没有回复)

我认为此查询没有任何理由不起作用。确保您连接到同一个数据库。

答案 1 :(得分:1)

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

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

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

意味着不同的行为。

修改

在Drupal 6中,data中的webform_submitted_data字段是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;

这样,您仍然可以获得一系列结果,但无需使用长字符串值作为键并可能覆盖重复项。