我有一个名为last_name
的数据库字段。
我想按姓氏订购列表。
这是一个例子:
命名
Jan DSmit
Jan van de WSmit
Jan van ASmit
Jan de FSmit
我尝试使用SUBSTRING INDEX执行此操作但仅搜索空格。我有多个。
我有一个查询命令姓氏字段
$query = "SELECT user_id, meta_value as name
FROM $wpdb->usermeta
WHERE meta_key
LIKE 'last_name'
AND user_id
IN (SELECT user_id
FROM $wpdb->usermeta
WHERE meta_key='company'
AND meta_value IN ('".$imploded_brands."'))
ORDER BY name";
$implode_brands
拥有一系列品牌名称
这样做有效但是当订单开始时,所有以“面包车”开头的人都会把它放在一边。或者' de'彼此旁边就像脚本告诉它要做的那样。我想订购'面包车后面的名字。和' de'。
预期结果应为:
命名
Jan van ASmit
Jan DSmit
Jan de FSmit
Jan van de WSmit
----编辑----
经过一些阅读后,我发现:this和this
申请之后没有工作但也许我在这里做错了
$query = "SELECT user_id, meta_value as name
FROM $wpdb->usermeta
WHERE meta_key
LIKE 'last_name'
AND user_id
IN (
SELECT user_id
FROM $wpdb->usermeta
WHERE meta_key='company'
AND meta_value IN ('".$imploded_brands."'))
ORDER BY REPLACE (REPLACE (last_name, ' van ', ' '), ' de ', ' ')";
答案 0 :(得分:1)
如果我正确掌握了你的目标对我没有意义。
但万一你确实需要尝试:
$query = "SELECT user_id, meta_value as name
FROM $wpdb->usermeta
WHERE meta_key
LIKE 'last_name'
AND user_id
IN (SELECT user_id
FROM $wpdb->usermeta
WHERE meta_key='company'
AND meta_value IN ('".$imploded_brands."'))
ORDER BY REPLACE (REPLACE (name, ' van ', ' '), ' de ', ' ')";
您可以尝试将查询中的最后一行替换为:
ORDER BY REPLACE (REPLACE (last_name, ' van ', ' '), ' de ', ' ')";
答案 1 :(得分:0)
在我看来,最好在php中对结果数组进行排序,而不是直接从查询中对数据进行排序。所以这样的事情应该有效:
function cmp($a, $b)
{
$a = str_replace("van", "", $a);
$a = str_replace("de", "",$a);
$b = str_replace("van", "", $b);
$b = str_replace("de", "",$b);
return strnatcmp($a, $b);
}
usort($result_without_order, 'cmp');
未经测试,但我认为它应该可以正常工作,并为您提供预期的结果。