MySQL自定义逐行加入

时间:2017-05-31 14:43:56

标签: php mysql

所以我有以下表格

**accounts**

id  |   iban
1   |   ES80 2310 0001 1800 0001 2345
2   |   ES91 2100 0418 4502 0005 1332

**acc_rel**

account_id  |   target_table    |   target_id
1           |   users           |   2
2           |   clients         |   5

**users**

id  | username  | password
2   | abc       | cba

**clients**

id  | company_name  
5   | some_name

所以问题是acc_rel我有一个与用户,客户端或其他任何表相关的帐户。

由于原因,而不是我的理由,我无法改变这些表格或他们的工作方式"。

我需要做的是,从其他表中使用usernamecompany_name检索帐户信息,我需要在一个查询中执行此操作,以便我可以使用{{1过滤,或WHEREORDER BY。至少我认为我需要在一个查询中这样做。

这将是完美的输出:

LIMIT

那我怎么办呢?我不知道我将要执行哪些表account_id | account_owner 1 | abc 2 | some_name 或我需要什么列名称,以为在进行查询之前我可以通过PHP了解它。

如果正确的方法是另一种,那么改变所有表方案的解决方案也将受到赞赏。

2 个答案:

答案 0 :(得分:1)

基于@knowledge ...回答我做了这个查询,它的工作原理与我需要的一样。

SELECT AR.account_id,COALESCE(U.username, C.company_name) AS account_owner 
FROM accounts AS A
INNER JOIN acc_rel AS AR ON A.id = AR.account_id
LEFT JOIN users AS U ON U.id = AR.target_id AND AR.target_table = 'users'
LEFT JOIN clients AS C ON C.id = AR.target_id AND AR.target_table = 'clients'

如果我需要添加新表,那么维护是很痛苦的,但是它可以按我需要的方式工作。

答案 1 :(得分:0)

select AR.account_id,COALESCE(U.username,C.company_name) as account_owner 
from accounts A
join acc_rel AR on A.id=AR.account_id
left join users U on U.id=AR.traget_id and AR.target_table='user'
left join clients C on C.id=AR.traget_id and AR.target_table='clients'