[英]MySql get list of pages by user_id or if user_id is not defined get all pages
我想从我的 MySQL 表中获取页面列表。 但是,如果 $user_id 值为 NULL 并且如果定义了 $user_id 值,我想获取所有用户添加的页面列表,我需要获取该特定用户添加的页面列表。 我觉得可能有一个简单的解决方案,但我长期以来一直试图为这种情况找到解决方案,但我用诸如“WHERE user_id is NOT NULL OR user_id = $user_id”之类的方法失败了。 如何修改以下代码以获得预期结果?
public function getPagesList($user_id = NULL){
$this->db->query ('
SELECT `page_id`, `page_name`
FROM `pages`
WHERE `user_id` = :user_id
');
$this->db->bind(':user_id', $user_id);
return $this->db->resultSet();
}
您可以在 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<> 在这里摆弄
如果 $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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.