繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM