【发布时间】:2016-01-30 13:13:46
【问题描述】:
我的表格如下所示:
| id | user | data |
--------------------
| 1 | 11 | aaa1 |
| 2 | 11 | aaa2 |
| 3 | 11 | aaa3 |
| 4 | 22 | aaa4 |
| 5 | 33 | aaa5 |
| 6 | 33 | aaa6 |
| 7 | 44 | aaa7 |
我想选择包含所有数据的所有行,并且我想通过user 添加带有max id 的数据,应该如下所示:
| id | user | data | f_id | f_data |
------------------------------------
| 1 | 11 | aaa1 | 3 | aaa3 |
| 2 | 11 | aaa2 | 3 | aaa3 |
| 3 | 11 | aaa3 | 3 | aaa3 |
| 4 | 22 | aaa4 | 4 | aaa4 |
| 5 | 33 | aaa5 | 6 | aaa6 |
| 6 | 33 | aaa6 | 6 | aaa6 |
| 7 | 44 | aaa7 | 7 | aaa7 |
这是我的查询尝试:
SELECT t1.*, t2.id AS f_id, t2.data AS f_data
FROM table1 t1
LEFT JOIN table1 t2
ON t1.user=(SELECT MAX(t2.id)
FROM table1 t2
WHERE t2.user = t1.user )
更新: 所有答案都是正确的,但是当我在 80K+ 行的表上运行查询时,MySQL 需要大量时间来执行查询。对于我的项目,我将添加 ajax,以便用户单击它,php 将执行每次单击一行的查询。
【问题讨论】:
-
您的查询有什么问题?
-
我不得不说为什么,将
data复制到f_data并像这样创建f_id似乎没有多大意义,因为它几乎肯定会被弄乱未来起来。重新审视您的数据库设计 -
它在
f_id和f_data中给出null。