【发布时间】:2016-02-17 03:45:52
【问题描述】:
本质上,我正在尝试将所有 3 个表中的驱动程序数据连接到一个输出查询中,该查询通过 mysql 使用来自所述列的数据由正则表达式组织。
我要解决的问题与我的输出数据的顺序有关。 例如:我有 3 个表,这 3 个表中的每一个都有一个名为 driver 的列,其中包含相同的数据。区别在于驱动列中的“驱动程序/索引”。
利用这些数据,我计划根据司机的喜好重新排列单据和客户信息。
例如
表 |列 |数据
DeliverySlip [司机] (kevin/1)
PickupSlip [司机] (kevin/3)
NewCustInfo [驱动程序] (kevin/2)
输出应该是:
- 交货单
- 新客户信息
- PickupSlip
代替:
- 送货单
- PickupSlip
- 新客户信息
我的代码:
$driverget1="Kevin/1"; // this is grabbed through an SQL SELECT statement
$drivername=explode($driverget1,"/");
$tablearray2 = "DeliverySlip|PickupSlip|NewCustInfo";
$table2 = explode("|", $tablearray2);
$Query = "SELECT * FROM `bwa1`.`$table2[0]`,`bwa1`.`$table2[1]`,`bwa1`.`$table2[2]` WHERE `Driver` REGEXP '{$drivername[0]}/' AND `Accomplished`='0' ORDER BY `Driver` REGEXP '/[[:digit:]]' ASC";
当然我得到一个模棱两可的错误。所以,我在考虑使用 JOIN 语句。但是,据我所知,这似乎只是加入列而不是表。我只想根据 NAME/INDEX 对驱动程序进行排序,而忽略我从 3 个不同的表中获取信息的事实。对这些数据进行排序的最佳方法是什么?
更新:
我开始玩 UNION,这就是我一直在寻找的。 下面是一个例子:
SELECT * FROM
(
SELECT NewCustInfo.Driver,NewCustInfo.id,NewCustInfo.Accomplished
FROM NewCustInfo WHERE NewCustInfo.Driver
REGEXP 'Test123/' AND NewCustInfo.Accomplished='0'
ORDER BY NewCustInfo.Driver REGEXP '/[[:digit:]]' ASC
) DUMMY_ALIAS1
UNION ALL
SELECT * FROM
(
SELECT PickupSlip.Driver,PickupSlip.id,PickupSlip.Accomplished
FROM PickupSlip WHERE PickupSlip.Driver
REGEXP 'Test123/' AND PickupSlip.Accomplished='0'
ORDER BY PickupSlip.Driver REGEXP '/[[:digit:]]' ASC
) DUMMY_ALIAS2
UNION ALL
SELECT * FROM
(
SELECT DeliverySlip.Driver,DeliverySlip.id,DeliverySlip.Accomplished
FROM DeliverySlip WHERE DeliverySlip.Driver
REGEXP 'Test123/' AND DeliverySlip.Accomplished='0'
ORDER BY DeliverySlip.Driver REGEXP '/[[:digit:]]' ASC
) DUMMY_ALIAS3
在完全并集之后,我仍然需要弄清楚每个项目最初来自哪个表。我唯一能想到的就是将表名插入到 Driver 列中,并用分隔符将其分隔,以便它可以进行 REGEXP。
【问题讨论】: