2013-05-29 223 views
-1

我有三張表。查詢加入查詢,需要幫助

我結合公司和組件表與此代碼

$questions_query = "SELECT company_mast.id, component_mast.component_id 
        FROM company_mast 
        LEFT JOIN component_mast 
        ON company_mast.id = component_mast.company_id 
        WHERE component_mast.component_name = '".$component_name."' 
        AND company_mast.company_name = '".$company_name."'"; 

如期望的結果,如果我把COMPANY_NAME的鐘聲和COMPONENT_NAME作爲資產,我得到和3號的鐘聲和9的ID資產。現在,如果您查看customfields表,我需要使用特定的company_id和component_id來解決所有問題。

舉例:如果用戶輸入的貝爾公司和資產,他們需要獲得與3的company_id和9

的COMPONENT_ID所有問題所以這是我的查詢

SELECT * 
FROM customfield_mast 
LEFT JOIN (SELECT company_mast.id, component_mast.component_id 
      FROM company_mast 
      LEFT JOIN component_mast 
      ON company_mast.id = component_mast.company_id 
      WHERE component_mast.component_name = 'Assets' 
      AND company_mast.company_name = 'Bells') 
att 
ON customfield_mast.company_id = customfield_mast.component_id 

然而,這將返回所有問題在我的分貝,這不是我想要的。我是積極的,我的最後一個「ON」聲明是問題,但我不知道正確的聲明是什麼。我還沒有開始使用SQL注射保護,這是基層,讓我的疑問工作。感謝您的幫助

+0

如果您發佈的創建表的命令和一些INSERT語句,而不是使用像它會容易得多。或者甚至用一個工作模型 – Taryn

+0

使用'INNER JOIN'而不是'LEFT JOIN'來創建一個[sql小提琴](http://sqlfiddle.com)?附:你的問題仍然是模糊的。簡單地說,寫下你想要的。 – itachi

+2

問題是許多員工的圖像被阻擋,導致觀衆萎縮。如果您發佈了實際的創建表/插入內容,那麼您將有更多的目光來回顧這個問題。另外,我並不是說你在發佈問題時沒有做你的功課,我提出了改進它的建議。 – Taryn

回答

4

另一個連接有什麼問題?

SELECT company_mast.id, component_mast.component_id, CFM.DisplayName 
FROM company_mast 
LEFT JOIN component_mast 
    ON company_mast.id = component_mast.company_id 
LEFT JOIN CustomField_mast CFM 
    ON CFM.Company_ID = Component_mast.Company_ID 
    and CFM.Component_ID = component_Mast.Component_ID 
WHERE component_mast.component_name = '".$component_name."' 
    AND company_mast.company_name = '".$company_name."'"; 
+0

沒有錯。我只是沒有想到它。謝謝,我會檢查出來。 – IrishWhiskey

+0

它工作,我將「CFM.DisplayName」更改爲「CFM。*」。你看到有什麼問題嗎?它正在返回我想要的。 – IrishWhiskey

+1

如果添加或刪除新列的時間晚於*,則將刪除或選擇這些列。通過明確定義字段名稱,您可以不再需要更多的東西;併發生適度的性能收益。 *從長遠來看並不好。 – xQbert

1
SELECT * FROM `customfield_mast` 
WHERE `company_id` = 
    (SELECT `id` FROM `company_mast` WHERE `company_name` = '$company_name') 
AND `component_id` IN 
    (SELECT GROUP_CONCAT(`component_id`) FROM `component_mast` 
    WHERE `component_name` = '$component_name') 
+0

看起來乾淨,我喜歡它。但是,我收到此消息'子查詢返回多於一行' – IrishWhiskey

+1

意味着您在數據庫中有reduandant條目。是不是你的公司名稱或組件名稱是唯一的?公司名稱是 – itachi

+0

,組件名稱不是。組件名稱將爲每個公司具有相同的4個值。 component_id是唯一的 – IrishWhiskey