2015-07-20 188 views
0

咄马上你会认为蝙蝠“使用ORDER BY,然后列”,但我的价值观:排序MySQL查询忽略大小写

  1. 一个
  2. ž
  3. 一个
  4. ž

当我使用此查询对它们进行排序:

SELECT * FROM Diaries ORDER BY title ASC; 

然后我得到这个:

  1. 一个
  2. ž
  3. 一个
  4. ž

当我想这样的事情,第一期

  1. 一个
  2. 一个
  3. ž
  4. ž

我有同样的排序问题,别的地方,第二个问题,但我能用下面的方法解决这个问题:暂时将所有字符都放在小写字母中

for (NSString *key in [dicGroupedStories allKeys]) { 
    [dicGroupedStories setValue: [[dicGroupedStories objectForKey: key] sortedArrayUsingComparator:^NSComparisonResult(id a, id b) { 
     NSString *stringA = [[a objectStory_title] lowercaseString]; 
     NSString *stringB = [[b objectStory_title] lowercaseString]; 

     return [stringA compare: stringB]; 
    }] forKey: key]; 

} 

唯一的原因,为什么我不使用此比较排序我的第一个问题是BC我不想执行我的查询然后排序他们,然后使用数组。

问题:我想知道,如果有一种方法对它们进行排序如何我想,像我在第二个问题的确,在一个SQL查询

objects id a and id b are arrays that contain other objects like title, date created, description, etc. objectDiary_title returns a NSString

+1

你能为sortField'添加一个'LOWER(场)的选择,并按照命令做到像'ORDER BY的SortField,标题;'这应该先按小写先大写再按大写顺序,这样你才能基本得到你想要的东西。 – MiltoxBeyond

+0

当时,这很快谢谢!我会尽快给它一个尝试,所以我将不得不添加这个选择像'SELECT .. TOLOWER(title)as sortField .. from Diaries .. ORDER BY sortField,title;'? – ErickES7

+1

您确实希望如何排序?你可以在'ORDER BY'子句中将小写应用于所有内容,但是这可能会给出像'A,A,a,a,a,B ...'这样的东西,你实际上想要'A,A, A,a,a,a,B,b,b ...' – 2015-07-20 22:54:16

回答

0

在SQL中,你可以使用在lower()upper()功能在order by

ORDER BY lower(Diaries), diaries 
+0

感谢您的回答,请检查:3 – ErickES7

+0

到目前为止,这已经令人满意.. :) – ErickES7

0

您可以使用COLLATE与xxx_ci其中C指的情况下insens itive。例如:

SELECT * FROM Diaries ORDER BY title COLLATE 'latin1_general_ci' ASC; 

有关于在MySQL这里大小写的更多信息:https://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html。它对于搜索和比较也很有用。

+0

哇,是否有必要有这样一个特定的敏感度?我只是想混合大写字母和小写,所以你不会在列表底部找到一个bc它是小写的 – ErickES7

+0

这真的取决于你和你需要做什么。如果lower()方法适用于你,那也没关系。我只是给你另一种选择:) – mongjong

+0

谢谢! :)可能会来使用这种方法,当我有更多的日记标题的例子 – ErickES7

0

使用不区分大小写的collation,如:

ORDER BY Diaries COLLATE utf8_unicode_ci ; 

然而,改变核对上即时,像任何convertion on-the-fly,使得查询不能使用的索引(其是如果数据上可接受的设置为排序足够小)。

如果性能是一个问题,那么你最好重新索引与目标排序列:然后

ALTER TABLE MODIFY COLUMN Diaries VARCHAR(10) COLLATE utf8_unicode_ci ; 

ORDR BY将情况通过默认不敏感,可以在该列使用索引。

utf8_unicode_ci只是一个例子。只要确保你使用的排序规则*_ci(不区分大小写),这是compatible with the column's encoding