MySQL&;PHP:按英文字母顺序对文本进行排序;非英语的字符串长度
我在MySQL数据库表中有一个文本字段,其中的文本值混合了英语和非英语条目(假设字符串以字母开头被视为英语) 我想对值进行排序,并在HTML下拉框中使用它。数据示例:MySQL&;PHP:按英文字母顺序对文本进行排序;非英语的字符串长度,php,mysql,Php,Mysql,我在MySQL数据库表中有一个文本字段,其中的文本值混合了英语和非英语条目(假设字符串以字母开头被视为英语) 我想对值进行排序,并在HTML下拉框中使用它。数据示例: Banana Apple Juice 西瓜 水蜜桃 ピタヤピタヤ ピーチ 我想把它分类为: Apple Banana Juice 西瓜 ピーチ 大水蜜桃 ピタヤピタヤ 英文条目先按字母顺序升序排列;然后是非英语条目,后跟字符串长度。我想我必须用PHP来解决这个问题,对吗 PHP伪代码 $result_set = ( get r
Banana
Apple
Juice
西瓜
水蜜桃
ピタヤピタヤ
ピーチ
我想把它分类为:
Apple
Banana
Juice
西瓜
ピーチ
大水蜜桃
ピタヤピタヤ
英文条目先按字母顺序升序排列;然后是非英语条目,后跟字符串长度。我想我必须用PHP来解决这个问题,对吗
PHP伪代码
$result_set = ( get result set from database with MySQL query )
// perform array sort ( after identifying English & non-English
echo '<select>';
foreach($row in $result_set) {
echo '<option value="{ some values here }">{ row text }</option>';
}
echo '</select>';
$result\u set=(使用MySQL查询从数据库获取结果集)
//执行数组排序(在识别英语和非英语之后
回声';
foreach($result\u set中的行){
回显“{row text}”;
}
回声';
这里有两个问题:
使用此查询,您只需使用
COLLATE utf8\u bin
即可进行排序
SELECT *
FROM Table1
ORDER BY text COLLATE utf8_bin
工作示例以下ORDER BY子句应该可以做到这一点:
ORDER BY IF(is_english(text), text, "zzzzzzzzz"), CHAR_LENGTH(text)
您需要了解如何实现
is_english()
。一个简单的方法是向数据库中添加一列。或者使用正则表达式查找任何非英语字母。我认为MySQL应该能够做到这一点,但我对MySQL没有经验,因此我只能在这里提供完整的PHP解决方案:
(如果字符串以字母开头,则在“”之后将被视为英语“):
$result\u set=数组(数组(“val”=>1,“text”=>“Banana”)、数组(“val”=>2,“text”=>“Apple”)、数组(“val”=>3,“text”=>“Juice”)、数组(“val”=>4,“text”=>”西瓜"),数组(“val”=>5,“text”=>大水蜜桃“”,数组(“val”=>6,“text”=>ピタヤピタヤ“”,数组(“val”=>7,“text”=>ピーチ"));
函数isEng($str)
{
$s=strtoupper(iconv_substr($str,0,1,“UTF-8”);
如果($s>=”A"&&&$sDoesn不能按字符串长度排序。@Jack如果按字母顺序排序,它将自动按长度排序。zz
将在abcdefg
之前排序?@Barmar查看编辑的小提琴是否正常工作。zz
将在abcdefg
之后。查看对小提琴的此修改,它无法正常工作perly:在决定什么是英语和什么不是英语时,你可能需要非常小心。英语文本中出现的带有重音的单词数量惊人。更不用说包含引用的外语字符串的英语文本(例如,这个问题).我想,就我而言,我可以检查字符串的第一个字母,看看它是否是非英语字符。(因为我将以英语字符开头的字符串视为英语字符串)
Array
(
[0] => Array
(
[val] => 2
[text] => Apple
)
[1] => Array
(
[val] => 1
[text] => Banana
)
[2] => Array
(
[val] => 3
[text] => Juice
)
[3] => Array
(
[val] => 4
[text] => 西瓜
)
[4] => Array
(
[val] => 7
[text] => ピーチ
)
[5] => Array
(
[val] => 5
[text] => 大水蜜桃
)
[6] => Array
(
[val] => 6
[text] => ピタヤピタヤ
)
)