MySQL&;PHP:按英文字母顺序对文本进行排序;非英语的字符串长度

MySQL&;PHP:按英文字母顺序对文本进行排序;非英语的字符串长度,php,mysql,Php,Mysql,我在MySQL数据库表中有一个文本字段,其中的文本值混合了英语和非英语条目(假设字符串以字母开头被视为英语) 我想对值进行排序,并在HTML下拉框中使用它。数据示例: Banana Apple Juice 西瓜 水蜜桃 ピタヤピタヤ ピーチ 我想把它分类为: Apple Banana Juice 西瓜 ピーチ 大水蜜桃 ピタヤピタヤ 英文条目先按字母顺序升序排列;然后是非英语条目,后跟字符串长度。我想我必须用PHP来解决这个问题,对吗 PHP伪代码 $result_set = ( get r

我在MySQL数据库表中有一个文本字段,其中的文本值混合了英语和非英语条目(假设字符串以字母开头被视为英语)

我想对值进行排序,并在HTML下拉框中使用它。数据示例:

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}”;
}
回声';
这里有两个问题:

  • 如何识别英文和非英文条目(在PHP/MySQL中)
  • 是否可以只在MySQL中进行计算

  • 使用此查询,您只需使用
    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] => ピタヤピタヤ
            )
    
    )