我有以下表设置:MySQL的合并两个查询
分支表:
...
manager_id
sales_manager_id
admin_manager_id
...
上述列包含用户表的外键。
使事情变得复杂我也有一个branches_extra表:
branches_extra:
id
branch_id
user_id
position_id
包含USER_ID,branch_id额外的,工作人员外键,将在树枝被显示在网站上联系页面。标志是用户有时会显示多次becuae他们可以有多个职位/角色,我目前有2个查询我用于返回分支表中指定的经理,然后branch_extra表中额外的工作人员:
SELECT CONCAT(xoops_users_extra.first_name, ' ', xoops_users_extra.last_name) AS full_name, , xoops_users_extra.profile_image_thumb, xoops_users.email,
CASE xoops_users_extra.main_userid
WHEN branches.manager_id THEN 'Manager'
WHEN branches.sales_manager_id THEN 'Sales Manager'
WHEN branches.admin_manager_id THEN 'Admin Manager'
WHEN branches.ops_manager_id THEN 'Ops Manager'
WHEN branches.export_manager_id THEN 'Export Manager'
WHEN branches.import_manager_id THEN 'Import Manager'
END AS position,
CASE xoops_users_extra.main_userid
WHEN branches.manager_id THEN 1
WHEN branches.sales_manager_id THEN 2
WHEN branches.admin_manager_id THEN 3
WHEN branches.ops_manager_id THEN 4
WHEN branches.export_manager_id THEN 5
WHEN branches.import_manager_id THEN 6
END AS sort_order
FROM (branches, xoops_users_extra, xoops_users)
WHERE ((branches.manager_id = xoops_users_extra.main_userid)
OR (branches.sales_manager_id = xoops_users_extra.main_userid)
OR (branches.admin_manager_id = xoops_users_extra.main_userid)
OR (branches.ops_manager_id = xoops_users_extra.main_userid)
OR (branches.export_manager_id = xoops_users_extra.main_userid)
OR (branches.import_manager_id = xoops_users_extra.main_userid))
AND xoops_users.uid = xoops_users_extra.main_userid
AND branches.branch_id = %d ORDER BY sort_order ASC
和额外的工作人员:
SELECT CONCAT(xoops_users_extra.first_name, ' ', xoops_users_extra.last_name) AS full_name,
positions.description AS position, xoops_users.email, xoops_users_extra.profile_image_thumb AS thumbnail
FROM (xoops_users, xoops_users_extra, branches_extra, branches, positions)
WHERE branches_extra.uid = xoops_users_extra.main_userid
AND positions.id = branches_extra.position
AND branches.branch_id = branches_extra.branch_id
AND xoops_users.uid = xoops_users_extra.main_userid
AND branches_extra.display =1
AND branches.branch_id = %d
我想在一个单一的查询和CONCAT的“位置”一栏,而不是具有多个项目合并查询...
总体模式尚不清楚。例如,xoops_users_extra表的这个main_userid字段是什么?什么是职位的表格字段等。顺便说一句,我鼓励你使用'明确的JOIN语法',因为如果没有别的东西,这样的结构会引入“自我记录”,使得分享(甚至是重新访问) )查询源代码。 – mjv 2009-10-27 13:31:35
这是一个令人难以理解的混乱,我已recenlty被聘请维护;-p – 2009-10-27 13:33:12
没关系,我想我会做一些数组muntering在php ... – 2009-10-27 13:33:59