2016-04-21 63 views
1

我想對多個表執行兩個查詢。第一個查詢連接多個表並使用多個條件。它是這樣的:根據以前的查詢執行選擇查詢

SELECT items.id, tableX.colA, tableY.colB ... 
FROM items 
    LEFT JOIN table2 ON ... 
    LEFT JOIN table3 ON ... 
    ... 
WHERE {some conditions are true} 

第二個查詢是一個簡單的查詢,但取決於第一個結果。我想通過他們的ID選擇與前一個查詢相關的所有行。所以它應該是這樣的

SELECT meta_name, meta_value FROM items_meta WHERE item IN ({LIST OF IDS FROM PREVIOUS QUERY}) 

這兩個查詢將用於不同的目的,因此他們不能合併成一個。

我一直在考慮將第一個查詢的結果存儲在臨時表中,然後將第二個查詢連接到它。但我似乎無法找到一種體面的方式來返回第一個查詢的行並將ID放入臨時表中。

所有貢獻非常感謝。 謝謝

+0

你的ID必須用逗號(,) –

+0

加入只需使用JOIN – Strawberry

回答

0

你必須設計你的ID's就像我在查詢中使用。您可以在這裏使用PHP的join函數。

查詢

SELECT meta_name, meta_value FROM items_meta WHERE item IN ('4', '8', '11') 
+0

是的,但這並不能幫助他做到這一點。這不僅僅是一個回答! – RiggsFolly

+0

正如他/她提到「第一個查詢連接多個表」。所以我建議加入ID。 –

+0

感謝您的貢獻。這是當前的實施。 join()函數不起作用,因爲結果由多個列組成。所以我目前使用PHP的foreach()函數來形成ID列表。我在想,在不使用PHP的情況下,在SQL中執行此操作可能會有更合適的方法 – elSama

2

這裏有兩種選擇:

  • Store中的(臨時)表中的第一個查詢的結果。然後在最終查詢中使用此表。
  • 將第一個查詢的結果存儲在應用程序中,然後構造IN列表。

或者,只是用結合查詢:

SELECT meta_name, meta_value 
FROM items_meta 
WHERE item IN (SELECT items.id 
       FROM table1 
        LEFT JOIN table2 ON ... 
        LEFT JOIN table3 ON ... 
        ... 
       WHERE {some conditions are true} 
      ); 
+0

先生,是'tableX.colA,tableY.colB ...'在這個目的不是問題? –

+0

...或者只是構建一個合適的查詢 – Strawberry

+1

因此,這是*三個選項然後;) – MatBailie

1

我建議不要做通過SQL第二查詢,但這樣做在PHP。已經執行的第一個查詢後,你會再選擇的信息保存到一個數組:

//MySQL (PDO): 
$sql = "...";//your first SQL code 
$sqlPrepared = $conn->prepare($sql); 
$sqlPrepared->execute(); 

$rows = $sqlPrepared->fetchAll(PDO::FETCH_ASSOC); 

在這一點上,你將有你需要做你的第二個算法/查詢/過濾器信息的陣列/不管HAHAH 。如果你把它放在另一個表中,你將不得不創建一個新表,其中所有新的列都比較單調乏味。相反,你可以:

$new_rows = array(); 
foreach ($rows as $row) 
{ 
    /*here you check if the row has the values you seek in the 'item' column 
    WHERE item IN ({LIST OF IDS FROM PREVIOUS QUERY})*/ 
    if (($row['item']== '4')||($row['item']== '10')||...) 
    { 
    array_push($new_rows, $row); 
    } 
} 

現在你有$ new_rows陣列,您可以使用的東西,如檢查你所選擇的信息:

print_r($new_rows); 

讓我知道,如果這是你要找的人!

+0

我認爲這種方法類似於@FrayneKanok提出的方法。這就是我將使用 – elSama

+0

@elSama很高興我能幫上忙。如果您對如何實施它有任何疑問,請不要猶豫,在評論中發佈一個問題:) – Webeng