在PHP中显示来自2个表的2个过滤列

时间:2012-07-04 14:59:05

标签: php mysql

我有2个表 - users和users_audit,需要将2个单独查询的结果显示为彼此相关的2列。我已经找到了两个问题。

查询用户:SELECT rowid,data FROM users WHERE columnid = 1 GROUP BY rowid;

+-------+------------+
| rowid | data       |
+-------+------------+
|     1 | John       |
|     2 | Abi        |
|     3 | Tony       |
|     4 | Gregg      |
|     5 | Jon        |
|     6 | Victor     |
|     7 | Daniel     |

查询users_audit:SELECT date_created FROM users_audit WHERE rowid = 6 ORDER BY date_created DESC, date_created DESC LIMIT 1;

查询的目的是显示特定rowid的最新date_created。

+---------------------+
| date_created        |
+---------------------+
| 2012-07-04 09:20:12 |
+---------------------+

表users_audit如下所示:

SELECT * FROM users_audit;

+-------+---------+--------------+-------------+---------------------+
|  id   |  rowid  | before_value | after_value | date_created        |
+-------+---------+--------------+-------------+---------------------+
|     1 |       6 | 3            | 5           | 2012-06-29 15:48:11 |
|     2 |       5 | Out (0)      | 2           | 2012-07-04 09:20:10 |
|     3 |       6 | 5            | 4           | 2012-07-04 09:20:12 |
|     4 |       7 | 3            | 6           | 2012-07-04 09:20:14 |
|     5 |       3 | 2            | 3           | 2012-07-04 09:20:16 |
|     6 |      15 | 6            | 5           | 2012-07-04 09:20:22 |

我需要显示2列 - 来自用户的数据和来自users_audit的date_created,用于每个rowid。这意味着必须为每个rowid(在循环中?)运行对users_audit的查询。

php中显示的预期结果是:

+------------+----------------------+
| data       | date_created         |
+------------+----------------------+
| John       | (latest date)        |
| Abi        | (latest date)        |
| Tony       | (latest date)        |
| Gregg      | (latest date)        |
| Jon        | (latest date)        |
| Victor     | 2012-07-04 09:20:12  |
| Daniel     | (latest date)        |

如何在php中实现这一点?

1 个答案:

答案 0 :(得分:0)

为什么你不能创建一个视图并使用连接来创建你想要的表?

 SELECT users.data, users_audit.date_created FROM users 
     INNER JOIN users_audit ON users.rowid = users_audit.rowid

或者我在这里遗漏了什么?

修改

 SELECT users.data, users_audit.date_created FROM users 
     INNER JOIN users_audit ON users.rowid = users_audit.rowid
     WHERE users_audit.date_created = (SELECT MAX(date_created) from users_audit
 GROUP BY rowid)

我相信这应该有用......?让我知道。