【问题标题】:Distinct not working MySQL [duplicate]不同的不工作的MySQL [重复]
【发布时间】:2017-04-26 18:38:47
【问题描述】:

我在基本查询中有这种奇怪的行为。

将此视为 twitter 提要,我试图从用户关注的十个不同的人那里获取最后的操作。

select DISTINCT performed_by_user_id, action_id from z_follows, actions 
WHERE user_id_following = 1 and z_follows.follower_id = actions.performed_by_user_id 
ORDER BY action_id DESC 
LIMIT 10

然而,这会返回以下内容(明显不明显):

我也尝试过 group by,但由于 order by,它也会返回不需要的数据。 为什么?

我不能使用 GROUP BY,因为 ORDER BY 会返回不正确的数据。

此时查询返回:

但我希望每个用户只执行一个操作,正如您在上面的屏幕截图中看到的那样,我应该在结果 2、236、685 中看到以下用户 ID,但是这个查询:

select performed_by_user_id, action_id from z_follows, actions 
WHERE user_id_following = 1 and z_follows.follower_id = actions.performed_by_user_id 
GROUP BY performed_by_user_id
ORDER BY action_id DESC 
LIMIT 10

返回这个:

【问题讨论】:

  • 不同的适用于结果集而不是单个列。
  • 你正在寻找一个群组。
  • @rlanvin group by 也因为 order by 返回了不正确的数据
  • @Callombert 在这种情况下,您必须进一步编辑您的问题以提供您期望的结果集示例。在我看来,您需要 group by 和 max() 以及可能的 join。
  • 谢谢,我已经添加了东西@rlanvin

标签: mysql


【解决方案1】:

select distinct 为您提供不同的行。如果您只查找每个 perform_by_user_id 中的一个,您将使用 group by。

【讨论】:

  • 查看已编辑的问题
  • 你能提供一个使用 group by 的例子吗?您想通过此查询获取什么数据,选择 perform_by_user_id 的次数?
  • 我已经编辑了问题 这是查询 select perform_by_user_id, action_id from z_follows, actions WHERE user_id_following = 1 and z_follows.follower_id = actions.performed_by_user_id GROUP BY perform_by_user_id ORDER BY action_id DESC LIMIT 10
  • 当你做一个组时,它会使用 action_ids 并从组中选择其中一个,通常是最后一个,但并非总是如此。因此,您看到的不是不正确的数据,而是由于最高 action_id 而重新排列的数据位于顶部。如果您取消限制 10 并按 perform_by_user_id 对数据进行排序,您将看到您在其他数据集中看到的较低 perform_by_user_id。您是否尝试从每个 perform_by_user_id 获取最后一个 action_id?
  • 是的,基本上我有一个类似推特的提要,当用户执行多个操作时,它会很拥挤,所以我试图切换,所以它显示来自 x 用户的最新操作,而不是最后 10 个操作有时会显示来自同一用户的 10 个操作。
猜你喜欢
  • 1970-01-01
  • 2021-12-20
  • 1970-01-01
  • 2021-08-16
  • 2021-05-14
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 1970-01-01
相关资源
最近更新 更多