2017-09-27 89 views
0

我想要搜索屬於OrderID的所有單元,並搜索屬於所研究單元的所有子單元。PHP選擇所有數據及其所有子數據(嵌套查詢)

所以,我需要這種方式進行過濾:

從表「單位」

所有數據,其中IDorder = $ IDOrder ,並從表「單位」,其中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個表,但問題是,對於子產品,我沒有引用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倍,它變得更加困難保持。 這就是爲什麼我試圖複製2個查詢僅1次查詢

+1

你能分享你的桌子嗎? –

+0

請提供樣本數據。 –

+0

'一切工作良好與2選擇查詢... ...但你只向我們展示了其中一個查詢。 –

回答

0

您可以使用下面的查詢這兩個查詢合併

「SELECT * FROM單位R1 JOIN單位R2上r2.IDMainUnit = R1。 IDUnit WHERE r1.IDOrder =:IDOrder」

在這裏你必須只使用 「加入」,而不是 「LEFT JOIN」

+0

不幸的是不工作,它只需要: 產品1 產品2 產品3 (而不是子產品) –

相關問題