如何从 3 个表中的部分列数据中排序 mysql 查询输出

How to order mysql query output from partial column data in 3 tables

本质上,我正在尝试将来自所有 3 个 table 的 Driver 数据连接到一个输出查询中,通过 mysql 使用来自所述列的数据使用正则表达式组织。

我要解决的问题与输出数据的排序有关。 例如:我有 3 个 table,这 3 个 table 中的每一个都有一个名为 driver 的列,其中包含相同的数据。区别在于 driver 列中的 "driver/index"。

根据这些数据,我计划根据 driver 的喜好重新排列单据和客户信息。
例如

Table |列 |数据
送货单 [Driver] (kevin/1)
PickupSlip [Driver] (kevin/3)
NewCustInfo [Driver] (kevin/2)


输出应该是:

  1. 送货单
  2. 新客户信息
  3. 取件单

而不是:

  1. 送货单
  2. 取件单
  3. 新客户信息

我的代码:

$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 语句。然而,根据我的理解,这似乎只是加入列而不是 tables。我只想根据 NAME/INDEX 对 driver 进行排序,而忽略我正在从 3 个不同的 table 中获取信息这一事实。对这些数据进行排序的最佳方法是什么?

更新:

我开始玩 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

我还需要弄清楚 table 每个项目在完全联合后最初来自哪个项目。我唯一能想到的是将 table 名称插入 Driver 列并用定界符将其分开,以便可以进行 REGEXP。

如何在 select 中添加 table 名称,如下所示:

SELECT * FROM  
(  
    SELECT NewCustInfo.Driver,NewCustInfo.id,NewCustInfo.Accomplished,'NewCustInfo' as tbname
    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,'PickupSlip' as tbname
    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,'DeliveryShip' as tbname
    FROM DeliverySlip WHERE DeliverySlip.Driver 
    REGEXP 'Test123/' AND DeliverySlip.Accomplished='0' 
    ORDER BY DeliverySlip.Driver REGEXP '/[[:digit:]]' ASC
) DUMMY_ALIAS3
SELECT * FROM (SELECT PickupSlip.Driver, 
SUBSTRING_INDEX(PickupSlip.Driver, '/', -1) AS orderindex, 
SUBSTRING_INDEX(PickupSlip.Driver, '/', 1) AS thedriver,
WHERE PickupSlip.Driver 
REGEXP '{$driverget1}/' 
AND PickupSlip.Accomplished='0') DUMMY_ALIAS1
ORDER BY (orderindex+0) ASC

这是我确定的代码。