簡體   English   中英

在PHP中嵌套SQL查詢

[英]Nesting SQL queries in PHP

在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中實現此查詢?

抬頭,你沒有使用相同的查詢! 當您告訴我們第一個查詢是您要查找其結果的查詢時,請將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)");

更新

您注意到兩個查詢都應該有效,但沒有一個有效。 我假設你沒有提出任何錯誤

(沒有返回)

我認為這個查詢沒有任何理由不起作用。 確保您連接到同一個數據庫。

是否值得指出兩個查詢不一樣?

來自phpMyAdmin的第一個查詢使用AND NOT EXISTS (...subquery...)

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

意味着不同的行為。

編輯

在Drupal 6中, data在字段webform_submitted_datamediumtext字段。 將其內容用作數組鍵可能不是一個好主意。 如何更改您的查詢如下:

$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;

這樣,您仍然可以獲得一系列結果,但無需使用長字符串值作為鍵並可能覆蓋重復項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM