2 回答

TA貢獻1844條經驗 獲得超8個贊
如果 $user_id 值為 NULL,并且如果定義了 $user_id 值,我想獲取所有用戶添加的頁面列表,我需要獲取該特定用戶添加的頁面列表。
這將翻譯為:
WHERE :user_id is NULL OR user_id = :user_id
當參數為 時null
,返回所有行;設置該參數后,用于過濾列user_id
。
您可以使用 稍微縮短表達式coalesce()
,但效率可能較低:
WHERE COALESCE(:user_id, user_id) = user_id
請注意,正如 Liam Sorsby 所評論的,最有效的選項可能是檢查參數是否是從您的應用程序設置的,并相應地修改查詢字符串。如果不設置該參數,則查詢沒有子句WHERE
;如果已設置,則WHERE user_id = :user_id
.

TA貢獻1845條經驗 獲得超8個贊
您可以在 LIKE 中使用通配符
正如 Liam Sorsby 正確指出的那樣,所有頁面都可能有很多頁面,因此您應該考慮分頁或限制行數
public function getPagesList($user_id = NULL){
? ?$uid = is_null($user_id) ?? '%' : $user_id;
? $this->db->query ('
? ? SELECT `page_id`, `page_name`
? ? FROM `pages`
? ? WHERE `user_id` LIKE :user_id
');
$this->db->bind(':user_id', $uid);
return $this->db->resultSet();
}
這就像這樣
create table numericstring
( pk INT auto_INCREMENT PRIMARY KEY
, id INT
);
insert into numericstring (id) values
?( 20001 )
,( 20002 )
,( 30001 )
,( 30002 )
,( 30003 )
,( 30004 )
,( 37 )
,( 937 )
,( 21 )
,( 3 )
,( 222222 )
,( 3333 )
;
select * from numericstring WHERE id LIKE '3'
pk | id
-: | -:
10 |? 3
select * from numericstring WHERE id LIKE 3
pk | id
-: | -:
10 |? 3
select * from numericstring WHERE id LIKE '%'
pk |? ? ?id
-: | -----:
?1 |? 20001
?2 |? 20002
?3 |? 30001
?4 |? 30002
?5 |? 30003
?6 |? 30004
?7 |? ? ?37
?8 |? ? 937
?9 |? ? ?21
10 |? ? ? 3
11 | 222222
12 |? ?3333
db<>
- 2 回答
- 0 關注
- 138 瀏覽
添加回答
舉報