在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中实现这个查询?
答案 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;
这样,您仍然可以获得一系列结果,但无需使用长字符串值作为键并可能覆盖重复项。