如何在会话中显示不同的发件人ID

问题描述 投票:-2回答:3

更新的问题:

我的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. 打印所有唯一的byuid作为输出。
  2. 按未读DESC排序
  3. 按时间顺序DESC
  4. 限制0,2(用于分页目的)

输出应该是:

1
2

有人可以帮我吗?我尝试过Group By,但它显示空结果。

php mysql group-by distinct
3个回答
0
投票
$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


0
投票
"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"

0
投票

如果不需要重复行,则应使用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
© www.soinside.com 2019 - 2024. All rights reserved.