从表中列出元素,添加其他表中的引用并在ORDER BY中使用它们

时间:2012-10-09 12:20:51

标签: mysql sql sql-order-by

表:

有帮助(重要的是id和fecha字段)

enter image description here

共享帮助(由具有不同日期的其他用户引用的帮助)

enter image description here

所以,

所有帮助来自用户(user_id = 1)

SELECT * FROM helps WHERE id_user = 1

所有帮助来自用户和他引用的人

SELECT * FROM helps where id_user = 1 or id IN (SELECT helpid FROM shared_helps WHERE userid = 1)

我知道你们会发现这是一个非常难看的问题(我希望你能告诉我这个问题),但它似乎显示了我想要的结果。问题是这样方式shared_helps.fecha被忽略,所以它在ORDER BY中没有效果,我怎么能实现呢?

2 个答案:

答案 0 :(得分:2)

SELECT
  helps.*
FROM
  helps
LEFT JOIN
  shared_helps
    ON  shared_helps.helpid = helps.id
    AND shared_helps.userid = 1
WHERE
     helps.id_user = 1
  OR shared_helps.userid = 1
ORDER BY
  CASE WHEN helps.id_user = 1 THEN 0 ELSE 1 END,
  shared_helps.fecha

修改

根据您的评论,试试这个......

ORDER BY
  COALESCE(shared_helps.fecha, helps.fecha)

或者可能这......

ORDER BY
  helps.fecha

老实说,我并不是百分之百确定你需要什么。也许你可以包括一些样本数据和你想要的那个样本数据的输出?

答案 1 :(得分:0)

希望这可以帮到你,试试这个:

  

SELECT * FROM帮助
  INNER JOIN shared_helps ON helps.user_id =   shared_helps.user_id WHERE helps.user_id = 1
  ORDER BY shared_helps.fecha ASC | DESC