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

我想从我的 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();

}


qq_遁去的一_1
浏览 104回答 2
2回答

婷婷同学_

如果 $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.

精慕HU

您可以在 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 |  3select * from numericstring WHERE id LIKE 3pk | id-: | -:10 |  3select * from numericstring WHERE id LIKE '%'pk |     id-: | -----: 1 |  20001 2 |  20002 3 |  30001 4 |  30002 5 |  30003 6 |  30004 7 |     37 8 |    937 9 |     2110 |      311 | 22222212 |   3333db<>
打开App,查看更多内容
随时随地看视频慕课网APP