php - MYSQL 可以 REGEXP 以相同的顺序返回
问题描述
我正在使用 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
解决方案
您可以使用以下ORDER BY FIELD()
语法:
ORDER BY FIELD(vehicle_id, 2, 1, 4)
这要求您按照您希望它们在结果集中的顺序枚举您期望在函数参数中出现的值。
我还建议不要使用正则表达式来过滤id
s 列表:这效率不高,而且不可扩展。相反,您应该为运算符构造一个列表IN
。
推荐阅读
- python - 禁止(CSRF 令牌丢失或不正确。) CSRF 令牌登录成功后
- c++ - 将 QOpenGLWidget 子类转换为使用 Metal 而不是 OpenGL 的子类是否可行?
- java - 为什么 Jsoup 会忽略 select 中的 JSTL 标签
- java - Spring-Session 不会自行创建表 SPRING_SESSION 和 SPRING_SESSION_ATTRIBUTES,但是当我手动创建它们时会抛出错误
- java - 尽管链接正确,RestTemplate 仍返回 404 代码
- javascript - 键盘事件没有在android上被调用
- python - 在python中通过Beautifulsoup提取对象的描述
- opencv - OpenCV Sobel 内核孔径大小 7 或 31
- python-3.x - Netmiko/Python 脚本不显示来自多个设备的输出
- android - 条件永远不会返回真