我有这个函数从数据库中获取用户:
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特定解决方案!
答案 0 :(得分:1)
我不熟悉你的php,你没有指定你正在使用的字符集。此外,它没有特别提及,但我想我们在这里谈论MySQL。
假设MySQL,假设您正在使用utf8的字符集。
您可以在选择中选择不同的排序规则(对utf8有效),例如
SELECT `name` COLLATE utf8_unicode_ci as `name` FROM `owners`;
这里的表是utf8字符集,我在name
列上使用utf8_unicode_ci(ci表示不区分大小写)整理模式。
如果您使用的是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;
}
指定charset的排序规则子集不会设置或更改该列/表上的默认排序规则。
答案 1 :(得分:0)
这与数据库的整理有关。将其更改为某些_ci变体(不区分大小写)并尝试相同的查询。