更新的问题:
我的private_messages数据库结构是这样的:
+----+-------+-------+-------+--------+------------+
| id | text | byuid | touid | unread | timesent |
+----+-------+-------+-------+--------+------------+
| 1 | Hi | 1 | 4 | 1 | 1514764805 |
| 2 | hello | 1 | 4 | 1 | 1514764804 |
| 3 | hlw | 1 | 4 | 1 | 1514764803 |
| 4 | good | 2 | 4 | 1 | 1514764802 |
| 5 | fine | 3 | 4 | 0 | 1514764801 |
+----+-------+-------+-------+--------+------------+
我的all_users_table是:
+----+-------+------+
| id | name | pass |
+----+-------+------+
| 1 | user1 | 123 |
| 2 | user2 | 112 |
| 3 | user3 | 124 |
| 4 | user4 | 258 |
| 5 | user5 | 315 |
+----+-------+------+
我当前的SQL代码是
$sql = "SELECT
a.name, b.id, b.byuid, b.unread, b.starred FROM all_users_table a
INNER JOIN private_messages b ON a.id = b.byuid
WHERE b.touid='4' AND starred='0'
ORDER BY b.timesent DESC, b.unread
LIMIT $limit_start, $items_per_page
";
哪个打印如下:
1
1
1
2
3
我想要的只是(对于touid = 4)
输出应该是:
1
2
有人可以帮我吗?我尝试过Group By,但它显示空结果。
$sql = "SELECT
a.name, b.id, b.byuid, b.unread, b.starred FROM all_users_table a
INNER JOIN private_messages b ON a.id = b.byuid
WHERE b.touid='".$myid."' AND starred='0' GROUP BY a.name
ORDER BY b.timesent DESC, b.unread
LIMIT $limit_start, $items_per_page";
尝试使用GROUP BY CLAUSE
"SELECT
a.name, b.id, b.byuid, b.unread, b.starred
FROM all_users_table a
LEFT JOIN private_messages b ON a.id = b.byuid
WHERE b.touid = '".$myid."' AND starred = '0'
ORDER BY b.timesent DESC, b.unread
LIMIT $limit_start, $items_per_page"
如果不需要重复行,则应使用DISTINCT子句
$sql = "SELECT DISTINCT
a.name, b.id, b.byuid, b.unread, b.starred
FROM all_users_table a
INNER JOIN private_messages b ON a.id = b.byuid
WHERE b.touid='".$myid."' AND starred='0'
ORDER BY b.timesent DESC, b.unread
LIMIT $limit_start, $items_per_page";
(在sql和最新版本的mySQL生成错误中,不推荐使用group by来避免在没有聚合函数的情况下重复行,因为SUM()或MAX()已被弃用
但是查看您的更新数据,您不是要查找不同的结果,而是查找最近发送的值的结果,为此您不需要区分,而是需要在您需要的列之间进行连接以及最近重新检索sot的子选择byuid的价值
select a.name, b.id, b.byuid, b.unread, b.starred
FROM all_users_table a
INNER JOIN private_messages b ON a.id = b.byuid A
INNER JOIN (
select byuid, max(timesent) max_sent
from private_messages
WHERE b.touid= 4
group by byuid
) t on t.byuid = b.byuid and t.max_sent = b.timesent
ORDER BY b.timesent DESC, b.unread
LIMIT $limit_start, $items_per_page