Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL顺序字母数字列_Mysql_Sql Order By - Fatal编程技术网

MySQL顺序字母数字列

MySQL顺序字母数字列,mysql,sql-order-by,Mysql,Sql Order By,我在MySQL查询中遇到了一些意想不到的结果。我想按我的帖子标题自然排序(我在运行WordPress,但我认为这与此无关) 下面是一些出现的标题的一个例子,给出一个想法: 1-1-1a 1-13-5j 7-1 9-1-2 12-13-2a 我做了一些研究,最接近我想要的结果 ORDER BY (posts.post_title+0) ASC 我仍然在一页的结果中得到一个奇怪的结果。完整查询如下所示 SELECT rlt13_posts.post_title FROM rlt13_posts

我在MySQL查询中遇到了一些意想不到的结果。我想按我的帖子标题自然排序(我在运行WordPress,但我认为这与此无关)

下面是一些出现的标题的一个例子,给出一个想法:

1-1-1a
1-13-5j
7-1
9-1-2 
12-13-2a
我做了一些研究,最接近我想要的结果

ORDER BY (posts.post_title+0) ASC
我仍然在一页的结果中得到一个奇怪的结果。完整查询如下所示

SELECT rlt13_posts.post_title
FROM rlt13_posts
INNER JOIN rlt13_term_relationships ON (rlt13_posts.ID = rlt13_term_relationships.object_id)
INNER JOIN rlt13_postmeta ON (rlt13_posts.ID = rlt13_postmeta.post_id)
JOIN rlt13_icl_translations t ON rlt13_posts.ID = t.element_id
AND t.element_type IN ('post_rlt_rule')
JOIN rlt13_icl_languages l ON t.language_code=l.code
AND l.active=1
WHERE 1=1
  AND (rlt13_term_relationships.term_taxonomy_id IN (92,417,418,419,420,421,422,423,424,425,426,427,428,429,430,431,432,433,434,435,436,437,438,439,440,441,442,443,444,445,446,447,448,449,450,451,452,453,454,455,456,457,458,501))
  AND rlt13_posts.post_type = 'rlt_rule'
  AND (rlt13_posts.post_status = 'publish')
  AND ((rlt13_postmeta.meta_key = 'new_rule'
        AND CAST(rlt13_postmeta.meta_value AS CHAR) = ''))
  AND t.language_code='en'
GROUP BY rlt13_posts.ID
ORDER BY (rlt13_posts.post_title+0) ASC
此查询在执行后给出以下结果(超出范围的结果排列整齐)

最后两个结果让我有些困惑。该查询在任何其他页面上提供预期结果。我确实注意到,当我从查询中删除以下语句时,上一个查询底部的两个意外结果将按自然顺序正确显示

感谢您对这件事的任何帮助

AND (rlt13_term_relationships.term_taxonomy_id IN (92, ****))

在MySQL中这并不容易,因为在处理分隔符分隔的字符串时会有困难。作为一个选项,您可以使用这样的函数(查询简化)

-另外,您不应该忘记将类型转换为整数(在上面的例子中转换为无符号)。使用以下示例数据:

+------+----------+ | id | name | +------+----------+ | 1 | 1-1-1a | | 2 | 1-13-5j | | 4 | 7-1 | | 5 | 9-1-2 | | 3 | 12-13-2a | +------+----------+ +------+----------+ |id |名称| +------+----------+ |1 | 1-1-1a| |2 | 1-13-5j| | 4 | 7-1 | | 5 | 9-1-2 | |3 | 12-13-2a| +------+----------+
非常感谢!我从来不知道子字符串索引函数。我能够解决我的问题。 +------+----------+ | id | name | +------+----------+ | 1 | 1-1-1a | | 2 | 1-13-5j | | 4 | 7-1 | | 5 | 9-1-2 | | 3 | 12-13-2a | +------+----------+