gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 05:31:18 24 4
gpt4 key购买 nike

请给我以下表格

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_Annex 表中选择数据,将它们按 Post 表的 Id 分组并按价格排序(这意味着通过 IdField当 Post_Annex 表等于 1 时)。所以这是我的查询:

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

这给了我这个顺序的结果:its Me |你好 |测试

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

请高手有什么idea帮我解决这个问题?提前致谢。

最佳答案

我只想修改连接子句,指定要排序的字段:

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 分组,但您选择(并按其排序)其他非聚合列,并且这些列的值可以是 undetemined .

关于PHP MySQL 从两个表中选择数据并按第三个表中的字段排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14448967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com