我想搜索属于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个查询
答案 0 :(得分:0)
您可以使用以下查询来合并两个查询
" SELECT * from units r1 JOIN units r2 ON r2.IDMainUnit = r1.IDUnit WHERE r1.IDOrder =:IDOrder"
这里你只能使用" JOIN"而不是" LEFT JOIN"