MySQL未首先显示最短结果
我们有一个标准的MySQL 5.1数据库,其中有一个名为places的表。我们有两列,name和name_bg,其中name是这个地方的英文名称,name_bg是这个地方的保加利亚名称 我们有两个地方以ММ开头。цц和ццццMySQL未首先显示最短结果,sql,mysql,Sql,Mysql,我们有一个标准的MySQL 5.1数据库,其中有一个名为places的表。我们有两列,name和name_bg,其中name是这个地方的英文名称,name_bg是这个地方的保加利亚名称 我们有两个地方以ММ开头。цц和цццц +--------+--------+--------------+ | id | name | name_bg | +--------+--------+--------------+ | 221543 | Rimini | Римини
+--------+--------+--------------+
| 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语句是导致订单异常的原因。有办法吗?