MYSQL:从表中回显结果,但不回显重复的结果?

时间:2013-12-11 00:26:04

标签: php mysql

我真的很挣扎,所以希望有人可以提供帮助。我有一张这样的桌子:

id | msg_id | to_user_id | from_user_id | subject | content
1      1          6             10          hi       hello
2      1          6             10          hi       hello
3      1          10            6           hi       hello
4      2          4             1           hi
5      3          1             4           hi

我想使用mysql用下面的查询回显这个表的结果。 目前我得到的所有结果都很好,但我不想回应重复的结果。在这种情况下,数字“1”在“msg_id”列中出现四次。我想使用DISTINCT COUNT或类似的东西来选择'msg_id'中的所有行,但不回显重复项,只计算一次'1'。

这是我的mysql声明:

function get_inbox2() {
                global $connection;
                global $_SESSION;
                $query = "SELECT *
                            FROM ptb_messages m, ptb_profiles p
                            WHERE m.to_user_id =".$_SESSION['user_id']."
                            AND m.to_user_deleted !='".$_SESSION['user_id']."'
                            AND m.from_user_deleted !='".$_SESSION['user_id']."'
                            AND m.from_user_id != '0'
                            AND p.user_id = m.from_user_id
                            ORDER BY m.date_sent DESC";


                            $inbox_set2 = mysql_query($query, $connection);
                confirm_query($inbox_set2);
                return $inbox_set2;
            }

我尝试过这样的事情,但没有显示结果:

$query = "SELECT COUNT(DISTINCT msg_id) totalCOUNT FROM ptb_messages WHERE to_user_id=".$_SESSION['user_id']."";

1 个答案:

答案 0 :(得分:0)

尝试仅为每个id获取带有MAX(id)的msg_id(您可以使用相同的逻辑获得MIN):

SELECT m.*,p.*
FROM ptb_messages m
INNER JOIN ptb_profiles p ON p.user_id = m.from_user_id
INNER JOIN (
  SELECT MAX(id) AS id,msg_id 
  FROM messages 
  GROUP BY msg_id
) a ON a.id = m.id
WHERE m.to_user_id = ".$_SESSION['user_id']."
  AND m.to_user_deleted != '".$_SESSION[' user_id ']."'
  AND m.from_user_deleted != '".$_SESSION[' user_id ']."'
  AND m.from_user_id != '0'
ORDER BY m.date_sent DESC