Php 如何在CI中忽略order子句中的大小写?

Php 如何在CI中忽略order子句中的大小写?,php,codeigniter,Php,Codeigniter,我有一个从数据库获取用户的功能: function get_users_limited($offset, $limit) { $q = $this->db->select('*') ->from('users') ->join('user_profiles', 'user_profiles.user_id = users.id' ) ->order_by('users.us

我有一个从数据库获取用户的功能:

function get_users_limited($offset, $limit)
{
    $q = $this->db->select('*')
              ->from('users')
              ->join('user_profiles', 'user_profiles.user_id = users.id'  )
              ->order_by('users.username asc')
              ->limit($limit, $offset)
              ->get();
    return $q;
}
我想按用户名asc对结果排序,但问题是它会对A和A、B和B等产生影响

问题是结果如下所示:

Albert
Bob
Caesar
axnGuy
blackboy83
c3p0
function get_users_limited($offset, $limit)
{
    $q = $this->db->select('users.username COLLATE latin1_general_ci as c1, user_profiles.* ')
              ->from('users')
              ->join('user_profiles', 'user_profiles.user_id = users.id'  )
              ->order_by('c1 asc')
              ->limit($limit, $offset)
              ->get();
    return $q;
}
我想要这个:

Albert
axnGuy
Bob
blackboy83
Caesar
c3p0
有没有关于如何在CodeIgniter中使用小写和大写字母的建议


我需要特定于CI的解决方案

这与数据库的排序规则有关。将其更改为某个_ci变量(不区分大小写),然后尝试相同的查询。

我不熟悉那里的php,并且您没有指定要使用的字符集。另外,没有特别提到,但我想我们在这里讨论的是MySQL

假设MySQL,假设您使用的是utf8字符集

您可以在select中选择不同的排序规则(对utf8有效),例如

SELECT `name` COLLATE utf8_unicode_ci as `name` FROM `owners`;
这里的表是utf8字符集,我在
name
列上使用utf8\uUnicode\uCI(不区分大小写的ci)排序模式

如果您使用的是默认字符集latin1,您可以执行以下操作:

SELECT `name` COLLATE latin1_general_ci as `name` FROM `owners`;
等等

完全不熟悉您的PHP,但我认为它看起来像这样:

Albert
Bob
Caesar
axnGuy
blackboy83
c3p0
function get_users_limited($offset, $limit)
{
    $q = $this->db->select('users.username COLLATE latin1_general_ci as c1, user_profiles.* ')
              ->from('users')
              ->join('user_profiles', 'user_profiles.user_id = users.id'  )
              ->order_by('c1 asc')
              ->limit($limit, $offset)
              ->get();
    return $q;
}

指定字符集的排序规则子集不会设置或更改该列/表的默认排序规则。

我可以问一下这样做的原因吗?您到底不明白什么?具体点解决方案您在CI active record中尝试过链接中的哪些代码,因为它对我不起作用?你尝试过CI吗?这是不可能的,我正在使用搜索,将来可能会出现一些问题。我只需要为这个列表函数使用它。它会导致什么问题?最终,活动记录查询只是一个普通的sql查询。更改排序规则不会影响CI(它与字符集不同)。显然,如果在表级别更改,它将更改该表所有结果的顺序。如果您在连接级别从/application/config/database.php更改它,显然将是系统范围的。由接受的答案(它不是我的)提供的代码已经是我考虑的代码。如果由于转义问题而无法工作,您可以使用“$this->db->select”('users.username将拉丁1_general_ci校对为c1,user_profiles.*',FALSE)“”以避免CI自动转义列名。我得到了此错误排序规则“latin1\u general\u CI”对字符集“utf8”无效。正如我所说,您没有提到正在使用哪个字符集。如果
utf8
您需要将
db->select
中的
latin1\u general\u CI
更改为
utf8\u unicode\u CI
。字符集决定指定可以存储哪些字符,而排序规则模式指的是按子句排序的规则。因此,排序规则模式特定于其字符集,但一个字符集可以有许多不同的排序模式。