所以我有下表
**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
我有一个与用户、客户或任何其他表相关的帐户。
由于各种原因,而不是我的原因,我无法更改此表或它们“工作”的方式。
我需要做的是,从其他表中检索带有username
或company_name
的帐户信息,我需要在单个查询中完成它,所以我可以使用 WHERE
进行过滤,或使用 ORDER BY
和 LIMIT
。至少我认为我需要在单个查询中执行此操作。
这将是完美的输出:
account_id | account_owner
1 | abc
2 | some_name
那么我该怎么做呢?我不知道我要对哪些表执行JOIN
或我需要什么列名,我想我可以在执行查询之前使用 PHP 知道它。
如果正确的方法是另一种,则更改所有表方案的解决方案也将受到赞赏。
最佳答案
基于@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'
如果我需要添加新表,维护起来会很痛苦,但好在,它按照我需要的方式工作。
关于php - MySQL 自定义逐行连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44287823/