PHP选择所有数据及其所有子数据(嵌套查询)

时间:2017-09-27 09:08:44

标签: php mysql

我想搜索属于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个查询

1 个答案:

答案 0 :(得分:0)

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

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

这里你只能使用" JOIN"而不是" LEFT JOIN"