MySQL未首先显示最短结果

MySQL未首先显示最短结果,sql,mysql,Sql,Mysql,我们有一个标准的MySQL 5.1数据库,其中有一个名为places的表。我们有两列,name和name_bg,其中name是这个地方的英文名称,name_bg是这个地方的保加利亚名称 我们有两个地方以ММ开头。цц和цццц +--------+--------+--------------+ | id     | name   | name_bg      | +--------+--------+--------------+ | 221543 | Rimini | Римини    

我们有一个标准的MySQL 5.1数据库,其中有一个名为places的表。我们有两列,name和name_bg,其中name是这个地方的英文名称,name_bg是这个地方的保加利亚名称

我们有两个地方以ММ开头。цц和цццц

+--------+--------+--------------+
| id     | name   | name_bg      |
+--------+--------+--------------+
| 221543 | Rimini | Римини       |
|  34514 | Rome   | Рим          |
+--------+--------+--------------+
这样搜索时:

select id, name from places where name like 'рим%';
select id, name from places where name_bg like 'рим%';
或者像这样:

select id, name from places where name like 'рим%';
select id, name from places where name_bg like 'рим%';
一切看起来都很好

奇怪的是,像这样搜索GROUPBY子句时:

SELECT places.name, places.name_bg, places.country_id, countries.continent_id WHERE places.name LIKE 'рим%' OR places.name_bg LIKE 'рим%' ORDER ("CHAR_LENGTH(places.name), CHAR_LENGTH(places.name_bg), countries.continent_id, places.popular DESC") GROUP BY country_id LIMIT 10
该查询首先返回的是ццццц,而不是ццц

我们尝试了查询的顺序和组,但没有任何帮助

甚至切换了这些位置的ID,但出现了相同的结果

我们想先得到短球的结果

任何帮助都是值得的

最好的,
Yavor我不清楚你为什么期望它会这样。该函数是否满足您的需要

SELECT id,
       name
FROM   places
WHERE  name_bg LIKE 'рим%'
        OR name LIKE 'рим%'
ORDER  BY Length(name)  

我不清楚你为什么认为应该这样。该函数是否满足您的需要

SELECT id,
       name
FROM   places
WHERE  name_bg LIKE 'рим%'
        OR name LIKE 'рим%'
ORDER  BY Length(name)  

如果没有ORDERBY子句,则无法以任何确定的顺序返回结果。可以在不同的查询中更改。如果您希望首先得到最短的结果,请按长度排序结果。

如果您没有order by子句,则无法以任何确定的顺序返回结果。可以在不同的查询中更改。如果您希望首先得到最短的结果,请按长度排序结果。

您必须了解,没有ORDERBY子句的select查询本质上是无序的。它可能看起来有特定的顺序,这通常以相同的方式产生。但这只是实施的结果。在大多数情况下,可以通过查看使用了什么索引来预测。但你不应该以任何方式依赖这一点


您可以通过添加ORDERBY子句对结果集进行排序:可能使用CHAR_LENGTH函数。多字节字符计为单个字符。如果字符串的长度相等,则顺序也是未定义的。例如,如果你想确保结果是按字母顺序排列的。使用第二个子句说明名称。还应注意,字母顺序是由排序规则完成的。因此,如果设置为保加利亚排序规则,它将按保加利亚排序。

您必须了解,没有ORDERBY子句的select查询本质上是无序的。它可能看起来有特定的顺序,这通常以相同的方式产生。但这只是实施的结果。在大多数情况下,可以通过查看使用了什么索引来预测。但你不应该以任何方式依赖这一点


您可以通过添加ORDERBY子句对结果集进行排序:可能使用CHAR_LENGTH函数。多字节字符计为单个字符。如果字符串的长度相等,则顺序也是未定义的。例如,如果你想确保结果是按字母顺序排列的。使用第二个子句说明名称。还应注意,字母顺序是由排序规则完成的。因此,如果设置为保加利亚排序规则,它将按保加利亚排序。

为什么按名称过滤而不选择它?这肯定是正确的吗?你考虑过全文搜索吗?为什么你要按名称过滤而不选择它?这绝对正确吗?你考虑过全文搜索吗?很抱歉,我把这个案例简化了。事实证明,GROUPBY语句是导致订单异常的原因。有什么办法吗?很抱歉我把事情简化了。事实证明,GROUPBY语句是导致订单异常的原因。有办法吗?