查询加入查询,需要帮助

时间:2013-05-29 17:52:20

标签: php mysql sql

我有三张桌子。

我将公司和组件表与此代码结合起来

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

示例:如果用户输入Bells和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

然而,这会返回我的数据库中的所有问题,这不是我想要的。我很肯定我的最后一个“开启”声明是问题,但我不知道正确的陈述是什么。我还没有开始SQL注射保护,这是草根,让我的查询工作。谢谢你的帮助

2 个答案:

答案 0 :(得分: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."'";

答案 1 :(得分: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')