PHP MySQL从两个表中选择数据,并从第三个表中按字段排序

PHP MySQL从两个表中选择数据,并从第三个表中按字段排序,php,mysql,group-by,sql-order-by,Php,Mysql,Group By,Sql Order By,请给我下列表格 Field +----+--------+----------+---------------------+ | id | name | Type | date | +----+--------+----------+---------------------+ | 1 | price | int | 2009-09-02 00:07:07 | | 2 | width | float | 2009-09-02 00

请给我下列表格

Field
+----+--------+----------+---------------------+
| id | name   | Type     | date                |
+----+--------+----------+---------------------+
|  1 |  price | int      | 2009-09-02 00:07:07 |
|  2 |  width | float    | 2009-09-02 00:07:08 |
|  3 |  height| float    | 2009-09-02 00:07:30 |
+----+--------+--------------------------------+


Post
+----+--------+---------------------------------+
| id |title   | Body                            |
+----+--------+---------------------------------+
|  1 |  test  | Bla bla bla                     |
|  2 | Hello  | Bla bla bla                     |
|  3 | Its me | Bla bla bla                     | 
+----+--------+---------------------------------+


Post_Annex
+----+--------+----------+---------------------+
| id | IdPost | IdField  | Value               |
+----+--------+----------+---------------------+
|  1 |  1     | 1        | 50                  |
|  2 |  1     | 2        | 21                  |
|  3 |  1     | 3        | 3                   |
|  4 |  2     | 1        | 10                  |
|  5 |  2     | 2        | 2                   |
|  6 |  2     | 3        | 150                 |
|  7 |  3     | 1        | 1                   |
|  8 |  3     | 2        | 25                  |
|  9 |  3     | 3        | 15                  |
+----+--------+--------------------------------+
我希望从PostPost_附件表格中选择数据,根据Post表格的Id对其进行分组,并根据价格进行排序(当其等于1时,这意味着Post_附件表格的IdField)。这就是我的问题:

SELECT p.title
    FROM Post p
    LEFT JOIN Post_Annex pa
       ON p.id = pa.IdPost

    GROUP BY p.id

    ORDER BY case when pa.IdField = 1 then 0 else 1, pa.Value DESC
这给了我以下顺序的结果:
itsme | Hello | test

这很好。但即使我尝试按宽度(IdField=2)或高度(IdField=3)排序,也会得到相同的结果


有什么办法帮我解决这个问题吗?提前感谢。

我只需修改join子句,以指定要排序的字段:

SELECT p.title
FROM Post p
     LEFT JOIN Post_Annex pa
     ON p.id = pa.IdPost
        AND pa.idfield=1
ORDER BY pa.Value DESC
然后你就不必按p.id分组了


您的查询并不总是有效的,因为您是按
p.id
分组的,但您正在选择(和排序)其他未聚合的列,并且这些列的值可以是。

在一个简单的SQL中,避免按分组,并在以下情况下按大小写:

SELECT p.title
FROM Post p, Post_Annex pa
WHERE p.id = pa.IdPost
AND pa.IdField = 1
ORDER BY pa.Value DESC

您可以简单地这样做。

顺序是正确的,但它会返回4个结果,而不是3个:((重复一个结果). Thanks@SamiElHilali你有一些重复的值吗?或者你可能需要一个
内部连接而不是
左连接
?使用你的示例数据,它看起来很有效是的,我有第三个表,但我只是离开了group by,我加上和pa.idfield=1,它工作得很好。(我认为Mysql扩展了顺序)谢谢你的解释和帮助