我想搜索属于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”