我有三张桌子。
我将公司和组件表与此代码结合起来
$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
注射保护,这是草根,让我的查询工作。谢谢你的帮助
答案 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')