为了账号安全,请及时绑定邮箱和手机立即绑定

MySql 通过 user_id 获取页面列表,或者如果未定义 user_id 则获取所有页面

MySql 通过 user_id 获取页面列表,或者如果未定义 user_id 则获取所有页面

PHP
qq_遁去的一_1 2023-10-15 17:08:03
我想从我的 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();}
查看完整描述

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.


查看完整回答
反对 回复 2023-10-15
?
精慕HU

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

查看完整回答
反对 回复 2023-10-15
  • 2 回答
  • 0 关注
  • 98 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信