【问题标题】:MYSQL can REGEXP return in same orderMYSQL 可以 REGEXP 以相同的顺序返回
【发布时间】:2020-06-21 21:03:34
【问题描述】:

我正在使用 REGEXP 通过从另一个查询中提供参数来从数据库中获取车辆名称。第一个查询是检查用户购买了哪些车辆,按数量对它们进行排序并将它们放入一个数组中。

我将 id 作为参数提供给 REGEXP,如下所示:'3|5|1|2',它返回它们按数字顺序排序(车辆名称为 1、2、3、5,而不是车辆名称为 3 ,5,1,2)。我希望它们以我输入它们的方式返回,或者如果有办法在 PHP 而不是 SQL 中做到这一点,请分享!

EXAMPLE:
$vehicles_user_has = array (         //from the first query
//ID => AMOUNT
"2" => "5"    //id2 = firetruck
"1" => "3"   //id1 = police car
"4" => "1"  //id4 = ambulance
);

$onlyid = implode("|", (array_keys($user_vehicles_array))); ----> gives me "2|1|4"

$findnames = $conn->prepare("SELECT vehicle_name,vehicle_id FROM vehicles WHERE vehicle_id REGEXP '$onlyid'");
$findnames->execute();

while ($row = $findnames->fetch(PDO::FETCH_ASSOC)) {
    echo $row['vehicle_name'] . " x " . $user_vehicles_array[$row['vehicle_id']] . "<br>";
}

This returns them sorted by ID (1,2,4):
Police car x 3
Firetruck x 5
Ambulance x 1

I want it to return:
Ambulance x 1
Police car x 3
Firetruck x 5

【问题讨论】:

    标签: php mysql sql regex sql-order-by


    【解决方案1】:

    你可以ORDER BY FIELD() syntax:

    ORDER BY FIELD(vehicle_id, 2, 1, 4)
    

    这要求您按照您希望它们在结果集中的顺序枚举您期望在函数参数中出现的值。

    我还建议不要使用正则表达式来过滤ids 的列表:这效率不高,而且不可扩展。相反,您应该为 IN 运算符构造一个列表。

    【讨论】:

    • 工作就像一个魅力!非常感谢哥们:)
    猜你喜欢
    • 2013-05-26
    • 1970-01-01
    • 2016-06-02
    • 2020-06-07
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    相关资源
    最近更新 更多