我真的很挣扎,所以希望有人可以提供帮助。我有一张这样的桌子:
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']."";
答案 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