我有一个简单的设置相关产品一对多。我的数据库有两个表: product
带的表格 id, name
列和联接表 product_assignments
与 product_id, related_id, order
柱。
我需要把所有相关的产品,按 order
柱
SELECT * FROM `products` LEFT JOIN
`related_assignments` `ra` ON `products`.`id` =
`ra`.`product_id` WHERE `id` IN (412, 1663, 1928) ORDER BY
`ra`.`order` DESC
我看不到任何错误,我得到所有三个记录(41216631928),但按其id排序,而不是按顺序字段。
如何使用一个sql请求对它们进行排序?
产品
+------+-------+
| id | name |
+------+-------+
| 412 | Watch |
| 1663 | Book |
| 1928 | Phone |
| 2000 | Cup |
+------+-------+
相关
+------------+------------+-------+
| product_id | related_id | order |
+------------+------------+-------+
| 2000 | 412 | 1 |
| 2000 | 1663 | 2 |
| 2000 | 1928 | 0 |
+------------+------------+-------+
1条答案
按热度按时间gojuced71#
从您的示例数据和预期结果来看,您似乎需要使用
ra.related_id
是连接条件而不是ra.product_id
,当你使用
Left join
在products.id =ra.product_id
它只会回来id = 2000
行数据。但是你的where子句id IN (412, 1663, 1928)
,这会让ra.order
都是null
,这样order by ra.order
什么也做不了。查询1:
结果: