我是 Moodle 的新手,并試圖為 Moodle 構建一個使用WHERE x IN (list of ids)
從檔案中我找到了方法
$DB->get_in_or_equal($id_list);
按照檔案,我創建了我的查詢,如下所示
list($insql, $inparams) = $DB->get_in_or_equal($some_ids);
$sql = "SELECT ...
FROM a
LEFT OUTER JOIN b ON a.id = b.aid AND b.userid = :userid
WHERE a.id $insql";
$rows = $DB->get_records_sql($sql, $inparams);
我的問題是如何:userid在方法中添加引數$DB->get_records_sql(...)
Moodle 檔案提到使用命名引數,但示例不是很清楚。
如果有人對如何構建這樣的查詢有任何見解(即使用 WHERE ... IN 和其他引數的查詢),將不勝感激
提前致謝。
uj5u.com熱心網友回復:
嘗試:
[$insql, $params] = $DB->get_in_or_equal($someids, SQL_PARAMS_NAMED);
$sql = "
SELECT ...
FROM a
JOIN b ON a.id = b.aid AND b.userid = :userid
WHERE a.id $insql";
$params['userid'] = $someuserid;
$rows = $DB->get_records_sql($sql, $params);
SQL_PARAMS_NAMED 選項意味著生成的 $insql 看起來像“IN (:param1, :param2, :param3)”而不是“IN (?, ?, ?)”。您可以使用其中任何一種,但不能在單個查詢中混合和匹配,例如,您可以擁有:
- “a.id IN (?, ?, ?) AND b.userid = ?”,params 陣列中的值以正確的順序排列
- 或“a.id IN (:param1, :param2, :param3) AND b.userid = :userid”,與命名為匹配的 params 陣列鍵(但它們可以是任何順序)
我通常使用第二個版本,只要有多個引數要插入,因為在重構時你不太可能犯錯誤,最終會以錯誤的順序插入引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/524161.html
標籤:mysql穆勒
上一篇:提交表單資料到MySQL問題
