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 关注
- 98 浏览
添加回答
举报