Mysql 先按姓氏对列表排序,然后按首字母排序
我正在尝试对wordpress生成的列表进行排序,但更为自定义Mysql 先按姓氏对列表排序,然后按首字母排序,mysql,sql,sql-order-by,Mysql,Sql,Sql Order By,我正在尝试对wordpress生成的列表进行排序,但更为自定义 global $wpdb; $orderby = " SUBSTRING_INDEX( {$wpdb->posts}.post_title, ' ', -1 ) ASC" 在wordpress中,这是在将sql语句返回到排序函数中。 这可以根据文章标题的最后一个字(我的例子中是姓)进行排序,但是如果两个人的姓相同,我希望它也可以根据名字进行排序 所以我需要的是一个sql行,它将按姓氏排序,然后按名字排序 不幸
global $wpdb;
$orderby = " SUBSTRING_INDEX( {$wpdb->posts}.post_title, ' ', -1 ) ASC"
在wordpress中,这是在将sql语句返回到排序函数中。
这可以根据文章标题的最后一个字(我的例子中是姓)进行排序,但是如果两个人的姓相同,我希望它也可以根据名字进行排序
所以我需要的是一个sql行,它将按姓氏排序,然后按名字排序
不幸的是,它都存储在同一列中(post_title),我无法更改它
我想我可以先按名字再按姓氏对专栏进行排序,但我没办法弄清楚。有办法做到这一点吗
吉尔涂鸦
布莱恩·杜德尔
葛培理
瑞安·图恩
玉米DNA香椿
詹姆斯斑马
亚当斑马
大卫斑马
比利斑马
但我希望它是这样分类的:
Brian涂鸦
吉尔涂鸦
葛培理
瑞安·图恩
玉米DNA香椿
亚当斑马
比利斑马
大卫斑马
詹姆斯斑马
PER@JoakimDanielson,我试过这个:
$orderby = " SUBSTR({$wpdb->posts}.post_title, 1, LOCATE(' ', {$wpdb->posts}.post_title) - 1), SUBSTR({$wpdb->posts}.post_title, LOCATE(' ', {$wpdb->posts}.post_title) + 1) ";
但它只按名字排序
- 亚当斑马
- 比利·格雷厄姆
- 比利斑马
- 布莱恩·杜德尔
- 大卫斑马
- 詹姆斯斑马
- 吉尔涂鸦
- 瑞安·图恩
- 玉米DNA香椿
$orderby = " SUBSTR({$wpdb->posts}.post_title, LOCATE(' ', {$wpdb->posts}.post_title) + 1) ASC, SUBSTR({$wpdb->posts}.post_title, 1, LOCATE(' ', {$wpdb->posts}.post_title) - 1) ASC ";
SQL的排序依据通常接受从左到右使用的列列表。。。如果只有一个空格,即一个名字和一个姓氏,您可以这样做
SELECT name
FROM table
ORDER BY SUBSTR(name, 1, LOCATE(' ', name) - 1),
SUBSTR(name, LOCATE(' ', name) + 1)
以上内容适用于MySql的5.6版本,但如果您有v8和更复杂的名称字符串,则可以使用正则表达式。虽然@JoakimDanielson发布了一个有效的答案,但我最终使用了以下代码:
$orderby = " SUBSTRING_INDEX( {$wpdb->posts}.post_title, ' ', -1 ) ASC, {$wpdb->posts}.post_title ASC ";
只是因为它不需要substr
函数
我仍在发布他的正确答案,以引导我找到正确的位置,我不完全确定其中一个比另一个好。请提供示例数据、所需结果以及您正在使用的数据库的标签。谢谢@GordonLinoff。我补充道,我不擅长sql,所以我不确定我是否把它放对了。你能检查一下我的问题的最新情况吗?考虑到目前的情况,这是一个非常好的解决方案:)这对我来说不起作用,但它把我推向了正确的方向@rudtek我现在看到你写的是按名字排序,然后按姓氏排序,我的答案也是这样,但是你的预期输出是按姓氏排序的。因此,如果你想先姓,请切换两个substr。我哪里都没有写。你是说要反转你的代码行吗?是的,我只有一个1列,所以我需要一种方法在这一列上同时做这两件事。