【问题标题】:ORDER BY column FROM another tableORDER BY column FROM 另一个表
【发布时间】:2018-10-09 19:02:55
【问题描述】:

我想通过 last_act 订购用户的朋友。但是有关用户的信息在表 users 中,而 last_act 在表 friends 中。

我试过了,但没用:

SELECT m.* 
FROM users AS m 
WHERE m.username = '$username' 
JOIN friends AS p 
ORDER BY p.last_act DESC

【问题讨论】:

  • Joinwhere 之前使用on。还可以使用错误报告,以便了解查询失败的原因。
  • 您的select 查询语法错误。
  • Select -> from -> join (on) -> where -> order by .遵循这种基本的条款安排
  • 你应该考虑使用参数化的Prepared Statements,而不是像这样直接在查询中使用 PHP 变量。
  • 请向我们展示usersfriends 的架构

标签: mysql sql-order-by multiple-columns


【解决方案1】:

您应该在朋友表上为用户设置一个外键。 例如说它的用户ID。 那么上面的查询将是:

SELECT m.* 
FROM users AS m 
    JOIN friends AS p ON p.userid = m.id  
WHERE m.username = '$username' 
ORDER BY p.last_act DESC

【讨论】:

  • 感谢您的回答,但由于某种原因,它仍然按朋友行的 id 排序
  • 这些别名有什么逻辑吗?为什么不users as ufriends as f
  • 哦对不起我的错误。我得到了它。我的代码出错了。感谢大家的回答。
【解决方案2】:

你的问题太模糊了,我们不知道表的结构,也没有看到错误信息......

但是看到有订单问题,它必须是 SELECT、FROM、JOIN、WHERE。并且您需要使用 ON 来映射 JOIN 中的关系。

例子

SELECT * FROM table1 JOIN table2 ON table1.id = table2.foreign_id

【讨论】:

    【解决方案3】:
    SELECT m.*, f.* 
    FROM users AS m  
    JOIN friends AS p 
    ON m.id = p.user_id
    LEFT JOIN users AS f 
    ON p.friend_id = f.id
    WHERE m.username = '$username' 
    ORDER BY p.last_act DESC
    

    【讨论】:

    • 为什么在 FROM 使用 users 时加入 users
    • @RiggsFolly 我不明白你的问题。 users 是表名 :-) 这就是它在 FROM 中的原因 :-)
    • 如果您保持原样编辑,您可能会看到错误
    • @Alex - Riggs 所做的只是格式化查询以使其更具可读性。
    • 我在您的回答下的第一条评论中提到了错误。 FROM 子句使用users 表,因此users 上的JOIN 充其量是不相关的,最坏的情况是错误的
    猜你喜欢
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    • 2023-01-28
    • 2017-10-07
    • 1970-01-01
    • 2011-02-06
    • 1970-01-01
    • 2019-05-03
    相关资源
    最近更新 更多