-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 作为 Bells 并将 component_name 作为 Assets,我得到 Bells 的 id 为 3,Assets 的 id 为 9。现在,如果您查看 customfields 表,我需要使用特定的 company_id 和 component_id 提取所有问题。

示例:如果用户输入 Bells and Assets,他们需要接收 company_id 为 3 且 component_id 为 9 的所有问题。

所以这是我的查询

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注入保护,这是让我的查询工作的基层。谢谢您的帮助

4

2 回答 2

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."'";
于 2013-05-29T18:02:51.760 回答
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')
于 2013-05-29T18:15:50.920 回答