簡體   English   中英

通過連接表的SQL Order By

[英]SQL Order By via Junction table

我對相關產品有一個簡單的設置。 我的數據庫有兩個表:

帶有id, name列的product表和帶有product_id, related_id, order列的聯結表product_assignments

我需要獲取所有相關產品, 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

我沒有看到任何錯誤,我得到了所有三個記錄(412、1663和1928年),但按其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 |
+------------+------------+-------+

根據示例數據和預期結果,您似乎需要使用ra.related_id作為連接條件,而不是ra.product_id

當在products.id =ra.product_id上使用Left join products.id =ra.product_id它僅返回id = 2000行數據。 但是您的where子句使用id IN (412, 1663, 1928) ra.order id IN (412, 1663, 1928) ,這將使ra.order全部為null ,從而使order by ra.orderorder by ra.order不起作用。

create table products(
   id int,
   name varchar(50)
);



insert into products values ( 412, 'Watch');
insert into products values (1663, 'Book ');
insert into products values (1928, 'Phone');
insert into products values (2000, 'Cup  ');


create table Related(
   product_id int,
  related_id  int,
   `order` int
);

insert into Related values (2000,  412 ,1 );
insert into Related values (2000, 1663 ,2 );
insert into Related values (2000, 1928 ,0 );

查詢1

SELECT * 
FROM `products` LEFT JOIN
`Related` `ra` ON `products`.`id` =
`ra`.`related_id` 
WHERE `id` IN (412, 1663, 1928) 
ORDER BY `ra`.`order` DESC

結果

|   id |  name | product_id | related_id | order |
|------|-------|------------|------------|-------|
| 1663 | Book  |       2000 |       1663 |     2 |
|  412 | Watch |       2000 |        412 |     1 |
| 1928 | Phone |       2000 |       1928 |     0 |

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM