0

问题:有人可以帮我修复以下代码以满足以下信息:

使用此查询时,它会在 diff 列上看到我的用户名多次出现在数据库中,因此在查询中找到它们时会复制我的帖子。我希望它显示同一个人的不同时间戳的帖子,但如果时间戳相同,则不显示来自同一个人的帖子。

可能是编写查询代码的更好方法,如果是这样,我不介意看到这些选项。做一个 UNION 查询是最好的方法吗?

$query = "SELECT p.* ".
"FROM posts p ".
"INNER JOIN friendships f ON p.username = f.user2 OR p.username = f.user1 ".
"WHERE f.user1 = '$sessionusername' OR f.user2 = '$sessionusername' ORDER BY id DESC"; 

解决方案:

我在这里回答我自己的问题,只是为了从我为解决问题所做的工作中给某人一个可行的解决方案。我尝试按ID分组,然后转身按ID排序;但是,它抛出了一个错误——所以我按时间戳排序,并按 ID 分组。下面是我的代码。为我工作——希望这最终能帮助别人!

$query = "SELECT p.*, MAX(timestamp) AS latest ".
"FROM posts p ".
"INNER JOIN friendships f ON p.username = f.user2 OR p.username = f.user1 ".
"WHERE f.user1 = '$sessionusername' OR f.user2 = '$sessionusername' GROUP BY id ORDER BY  latest DESC";   
4

1 回答 1

1

使用 GROUP BY 告诉 mysql 你希望哪些实体/字段是唯一的:

SELECT p.*
FROM posts p
INNER JOIN friendships f ON (p.username = f.user2 OR p.username = f.user1)
WHERE f.user1 = '$sessionusername' OR f.user2 = '$sessionusername' 
GROUP BY posts.id
ORDER BY id DESC
于 2012-07-05T05:34:56.607 回答