php - MySQL 自定义逐行连接

标签 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的帐户信息,我需要在单个查询中完成它,所以我可以使用 WHERE 进行过滤,或使用 ORDER BYLIMIT。至少我认为我需要在单个查询中执行此操作。

这将是完美的输出:

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/

相关文章:

mysql - 如何比较两个数据库的更改表

php - 无法从数据库中提取 ID

php - 从 wsdl 生成 php 代码

php - 同时使用 PDO 和 mysqli - 有碰撞风险吗?

php - Codeigniter php 上的数据库错误

php - 执行计算最近行总和并将结果插入新列的查询时出现问题

java - 使用 MySQL 填充 jTable

php - 我的系统允许重复 - 原因可能是 MySQL 写入延迟?

php - 用 PHP 实现 COMET

php - 在切换控制流的情况下是否可以调用函数?