-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 の文字セットを使用しているとします。

次のような select で別の照合 (utf8 で有効) を選択できます。

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

ここでは、テーブルは utf8 charset であり、列で 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 に答える