我在 MySQL 資料庫中有 2 個名為order和order_item.
一個order可以有多個order_items。所以我正在創建一張order表和一張order_item表(用外鍵映射到訂單表)。請參閱下面的 SQLFiddle 鏈接和架構。
SQLFiddle
create table if not exists order_info(
order_id int not null AUTO_INCREMENT,
delivery_address varchar(100),
created_at timestamp DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (order_id)
);
create table if not exists order_items(
item_id int not null AUTO_INCREMENT,
order_id int,
name varchar(100),
FOREIGN KEY (order_id) REFERENCES order_info(order_id),
PRIMARY KEY (item_id)
);
INSERT order_info(order_id, delivery_address, created_at)
VALUES (1, "NYC Manhattan", '2021-12-27 12:05:32'),
(2, "NYC Brooklyn", '2021-12-27 11:05:23'),
(3, "NYC Bronx", '2021-12-26 13:09:23');
INSERT order_items(item_id,order_id,name)
VALUES (1, 1, "Shoes"),
(2, 1, "Basketballs"),
(3, 1, "Baseballs"),
(4, 2, "Boxing gloves"),
(5, 3, "Baseball caps"),
(6, 3, "Nike T-shirts");
我正在尋找結合這兩個表但對專案數量施加計數限制的回應。
例如,我正在尋找串列格式的結果,其中order_item每個order.
order_id, delivery_address, item_id, item.name
所以我的結果會像
[{1, NYC Manhattan, 1, Shoes},
{1, NYC Manhattan, 2, Basketballs}]
假設我想查看最后 n 個放置在 NYC Bronx 的訂單商品。我了解這可能會導致包含回傳部分訂單的情況。''我的問題是:
- 向資料庫發起查詢是一種合理的方式嗎?我的資料庫設計是否足以支持此類查詢?
- 我嘗試了很多查詢,但無法進行任何查詢,這可能會對 order_items 中的行數施加限制。
uj5u.com熱心網友回復:
您可以使用以下查詢僅檢索包含一項的訂單:
select *
from (
select
o.*, i.item_id, i.name,
row_number() over(partition by i.order_id order by item_id) as rn
from order_info o
left join order_items i on i.order_id = o.order_id
) x
where rn <= 1
結果:
order_id delivery_address created_at item_id name rn
--------- ----------------- -------------------- -------- -------------- --
1 NYC Manhattan 2021-12-27 12:05:32 1 Shoes 1
2 NYC Brooklyn 2021-12-27 11:05:23 4 Boxing gloves 1
3 NYC Bronx 2021-12-26 13:09:23 5 Baseball caps 1
請參閱DB Fiddle上的運行示例。
rn <= 1如果您想增加每個訂單顯示的商品數量,請更改為更大的數字。
uj5u.com熱心網友回復:
嘗試類似:
SELECT t1.order_id, t1.delivery_address, t2.item_id, t2.name FROM order_info AS t1
INNER JOIN (
SELECT item_id, name, order_id FROM order_items
WHERE order_id=t1.order_id
ORDER BY item_id LIMIT 1
) AS t2 ON t1.order_id=t2.order_id
ORDER BY t1.order_id;
似乎在我上一個答案中誤解了您的問題。
以上沒有任何故意過度復雜的事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/422498.html
標籤:
