我想搜索属于OrderID的所有单位,并搜索属于所研究单位的所有sub_units。

所以我需要这样过滤:

表“ units”中的所有数据,其中IDorder = $ IDOrder
AND从表“ units”中搜索所有数据,其中IDMainUnit属于从第一次选择中搜索到的单位。

2个选择查询一切正常,但现在我只想使用一个选择查询。

我这样尝试过:

"SELECT * from units r1 LEFT JOIN units r2 ON r2.IDMainUnit = r1.IDUnit WHERE r1.IDOrder = :IDOrder"


但这似乎不起作用。
我正在研究JOIN的行为,但我仍然需要获得更多经验。

您能给我一个有关如何进行的建议吗?

如果IDOrder是例如4,那么我应该收到以下行:

+---------+--------+------------+-------------+-------+
| IDOrder | IDUnit | IDMainUnit | Description | Price |
+---------+--------+------------+-------------+-------+
|       4 |      5 |            | Product1    | 55.15 |
|         |      6 |          5 | SubProduct1 | 12.15 |
|         |      7 |          5 | SubProduct2 | 13.45 |
|       4 |      8 |            | Product2    | 12.30 |
|       4 |      9 |            | Product3    | 10.15 |
|         |     10 |          9 | SubProduct3 | 08.50 |
+---------+--------+------------+-------------+-------+




编辑:我用更好的格式编辑了表格。我只有1个表,但是问题是,对于sub_product,我没有引用IDOrder,而仅引用了IDMainUnit。

我可以写2 SELECT,例如:

     SELECT * FROM Units WHERE IDOrder = :IDOrder

    while (PDO:fetch){
    $IDUnit = $PDO['IDUnit'];
    SELECT * FROM Units WHERE IDMainUnit= $IDUnit
    while(PDO2:fetch){
    }
    }


但是我不喜欢这样,因为如果我将所有内容呈现在表中,那么我必须将代码复制2次,并且维护起来会更加困难。
这就是为什么我尝试仅在1个查询中复制2个查询的原因

最佳答案

您可以使用以下查询来合并两个查询

“从单元r1中选择* *在r2.IDMainUnit = r1.IDUnit WHERE r1.IDOrder =:IDOrder上加入r2单元”

在这里,您只需要使用“ JOIN”而不是“ LEFT JOIN”

10-02 13:08
查看更多