我试图通过尽可能多地在MySQL服务器上工作来优化我的PHP。我有这个sql查询,它从引导表中提取数据,但同时连接两个标签表来组合结果。我希望添加一个通过关系表链接的公司。
所以保存两者之间关系的表是relations_value,它简单地说明了(我添加了示例数据)
parenttable(公司)| parentrecordid(10)| childtable(lead)| childrecordid(1)
公司表有很多专栏,但只有两个相关的是;
id(10)| companyname(我的公司名称)
所以这个查询目前抓住了我需要的一切,但我想将公司名称带入查询:
SELECT leads.id,
GROUP_CONCAT(c.tag ORDER BY c.tag) AS tags,
leads.status,
leads.probability
FROM `gs_db_1002`.leads
LEFT JOIN ( SELECT *
FROM tags_module
WHERE tagid IN ( SELECT id
FROM tags
WHERE moduleid = 'leads' ) ) as b
ON leads.id = b.recordid
LEFT JOIN `gs_db_1002`.tags as c
ON b.tagid = c.id
GROUP BY leads.id,
leads.status,
leads.probability
我需要能够进入relations_values表并通过选择childtable = leads和childrecordid = 1来拉取parenttable和parentrecordid,并以某种方式加入这些以便我能够将companyname作为上述查询中的列...
这可能吗?
我创建了一个sqlfiddle:sqlfiddle.com/#!2/023fa/2所以我希望将companies.companyname作为列添加到查询中。
答案 0 :(得分:0)
我不知道你的主键和外键是什么把每个表连接在一起..如果你能更好地理解ID与彼此之间的联系,它会使这更容易......但是我做了确实返回正确结果的东西......但由于所有的ID都是= 1,那么它可能是不正确的。
SELECT
leads.id, GROUP_CONCAT(c.tag ORDER BY c.tag) AS tags,
leads.status, leads.probability, companyname
FROM leads
LEFT JOIN (
SELECT * FROM tags_module WHERE tagid IN (
SELECT id FROM tags WHERE moduleid = 'leads' )
) as b ON leads.id = b.recordid
LEFT JOIN tags as c ON b.tagid = c.id
LEFT JOIN relations_values rv on rv.id = b.recordid
LEFT JOIN companies c1 on c1.createdby = rv.parentrecordid
GROUP BY leads.id,leads.status, leads.probability