【问题标题】:MYSQL Sorting By Multiple Join ChildrenMYSQL 按多个连接子项排序
【发布时间】:2016-07-19 03:16:48
【问题描述】:

我似乎想不出一种方法来按加入的孩子对 sql 查询进行排序。

数据库示例:


表格:帖子

+------+---------+
| id   | title   |
+------+---------+
| 0    |'title1' |
| 1    |'title2' |
| 2    |'title3' |
+------+---------+

表格:post_meta

+------+---------+----------+---------+
| id   | post_id | key      | value   |
+------+---------+----------+---------+
| 0    |0        |'coolness'| 5       |
| 1    |0        |'desc'    |'random' |
| 2    |0        |'author'  |'bill'   |
| 3    |1        |'coolness'| 2       |
| 4    |1        |'desc  '  |'random' |
| 5    |2        |'author'  |'joe'    |
| 6    |2        |'coolness'| 9       |
+------+---------+----------+---------+

我想要一个按“酷”元编号(asc 或 desc)排序的帖子列表(或只是帖子 ID)。我不知道我是否应该从帖子表中选择并加入元表,或者反之亦然。当我加入 post_meta 表时,我只从其中一个元行中获取数据,所以如果我只是通过 post_meta.coolness 添加订单,则不会发生任何事情。


谢谢!

【问题讨论】:

    标签: mysql sql join sql-order-by children


    【解决方案1】:

    如果您只想要id,可以使用post_meta 表:

    select pm.post_id
    from post_meta pm
    where pm.key = 'coolness'
    order by pm.value + 0;
    

    + 0是将值(大概是字符串)转换为数字。

    如果您需要与帖子相关的其他栏目,可以加入posts表。

    【讨论】:

    • 感谢您的回复。我的数据库架构比我发布的示例要复杂一些。除了我还需要通过其他元值查询之外,您的查询会很好用。例如:所有具有元作者 -> 'name' 的帖子按酷度排序。如果能够通过任何/多个元值进行查询,就好像它是 post 表中的一列一样,那就太好了。 IE:获取所有带有 desc = 'random 和 author = 'name' 等的帖子,按酷度排序。
    • @magnito 。 . .你应该问另一个问题,而不仅仅是编辑你原来的问题。您的完整问题与您提出的完全不同。
    • 确实,您的回复确实回答了我原来的问题。
    猜你喜欢
    • 1970-01-01
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 2011-07-09
    • 2012-07-16
    • 1970-01-01
    相关资源
    最近更新 更多