2016-11-15 77 views
4

讓我澄清一下自己,我的問題是「如何從綁定單個表和交叉引用表中選擇行而不重複值?」從兩個表中選擇而不重複所有值

現在我有三個表,交叉引用表和兩個單表:

  Table jobs 
╔══════════╦══════════════════════════╗ 
║ job_id ║ details     ║ 
╠══════════╬══════════════════════════╣ 
║ 1  ║ Looking for hire...  ║ 
║ 2  ║ We need help!...  ║ 
║ 3  ║ We are a store that... ║ 
║ 4  ║ Help wanted...   ║ 
╚══════════╩══════════════════════════╝ 

     Table job2pos 
╔═══════════╦═════════════╗ 
║ job_id ║ position_id ║ 
╠═══════════╬═════════════╣ 
║ 1  ║ 10   ║ 
║ 2  ║ 10   ║ 
║ 2  ║ 12   ║ 
║ 3  ║ 11   ║ 
║ 3  ║ 13   ║ 
║ 4  ║ 10   ║ 
╚═══════════╩═════════════╝ 

     Table positions 
╔═══════════════╦═══════════════╗ 
║ position_id ║ position_name ║ 
╠═══════════════╬═══════════════╣ 
║ 10   ║ waitress  ║ 
║ 11   ║ cashier  ║ 
║ 12   ║ cook   ║ 
║ 13   ║ chef   ║ 
╚═══════════════╩═══════════════╝ 

當我執行此查詢:

$sql = "SELECT jobs.details, positions.name AS position FROM jobs 
INNER JOIN job2pos ON jobs.job_id = job2pos.job_id 
INNER JOIN positions ON job2pos.position_id = positions.position_id 
WHERE job2pos.job_id IN (2)"; 
... 
print_r($stmt->fetchAll(\PDO::FETCH_ASSOC)); 

而且我得到以下幾點:

Array(
    [0] => Array ([details] => We need help!... 
       [position] => Waitress) 
    [1] => Array ([details] => We need help!... 
       [position] => Cook) 
) 

現在我得到了2行爲同一項工作,但我想要的是類似於這樣的:

Array(
    [0] => Array ([details] => We need help!... 
       [position] => Array ([0] => Waitress 
            [1] => Cook) 
       ) 
) 
  • 如果你能指出我的代碼中的一些不必要的代碼,我將是巨大的。
+0

嘗試添加'選擇不同jobs.job_id'? –

+2

您可能必須將查詢分解爲2個單獨的查詢。它的工作方式應該是。 – Maximus2012

+0

@ user3360140嘗試過,但不起作用:< – Sarah

回答

1

您描述的內容不可能只使用一個sql語句。你可以把結果想象成一張桌子。在純sql中不能有任何嵌套的信息。

我們可以選擇nosql數據庫來存儲和檢索對象。

不過,我想你真的想要的是選擇multiple statements with one call

mysqli documentation

MySQL的可選允許具有在一個聲明中 串多個語句。一次發送多條語句減少了客戶端服務器往返,但需要特殊處理。

必須使用 mysqli_multi_query()執行多個語句或多個查詢。語句 字符串的單個語句用分號分隔。然後,必須獲取所有由 返回的結果集。

MySQL服務器允許有語句返回結果集 以及不返回結果集在一個多個 語句中的語句。

對於PDO從this Q&A

$stmt = $db->query("SELECT 1; SELECT 2;"); 
$stmt->nextRowset(); //Move to next statement result 
var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); //SELCT 2 result 
相關問題