-1

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

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

我想要这个:

Albert
axnGuy
Bob
blackboy83
Caesar
c3p0

任何建议如何在 CodeIgniter 中忽略小写和大写?

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

4

2 回答 2

1

我不熟悉那里的 php,并且您没有指定您使用的字符集。此外,它没有特别提到,但我假设我们在这里谈论的是 MySQL。

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

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

SELECT `name` COLLATE utf8_unicode_ci as `name` FROM `owners`;

这里的表是 utf8 字符集,我在列上使用 utf8_unicode_ci(不区分大小写的 ci)排序模式name

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

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

等等

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

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

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

于 2012-11-27T20:54:26.267 回答
0

这与数据库的整理有关。将其更改为一些 _ci 变体(不区分大小写)并尝试相同的查询。

于 2012-11-27T20:39:49.970 回答