1. 程式人生 > >SQL 查詢 分頁 連線

SQL 查詢 分頁 連線

問題:請設計一個關於使用者的訂單列表
1.查詢使用者名稱為張三的使用者(id="TianMao1003")的所有未支付的訂單資訊,並且按照新增時間排序。
2.針對問題1,進行分頁
3.針對問題1,進行分類,也就是該商品屬於那種屬性

(就是簡單的問題,欄位屬性資訊沒有認真的分析)

綜合三個問題(使用者資訊表除外)

首先得有一個分類表

id        type_name    type_id
1        衣服        0
2        配飾        0
3        上衣        1
4        褲子        1
5        襪子        1
6        內衣        1
7        項鍊        2
8        手鐲        2
9        鑽戒        2
10        耳環        2

商品資訊表
id    goods_id    goods_name    type_id        kucun        shop_id
1    1001        艾瑪夾克    3        1000        201701021213
2    1002        艾瑪秋褲    4        1200        201701021213
3    1003        艾瑪襪子    5        1200        201701021213
4    1004        艾瑪內衣    6        1200        201701021213
5    1005        艾瑪項鍊    7        1200        201701021213
6    1006        艾瑪手鐲    8        1200        201701021213
7    1007        艾瑪毛褲    4        1200        201701021213
8    1008        艾瑪皮褲    4        1200        201701021213

使用者訂單表
id    order_num    goods_id     user_id        add_time    pay_time    pay_state
1    201802031213    1002        TianMao1003    201802031213    201802031259    1
1    201802031215    1004        TianMao1003    201802031215    201802031259    1
1    201802031216    1004        TianMao1003    201802031216            0
1    201802031217    1002        TianMao1003    201802031217    201802031259    1
1    201802031218    1007        TianMao1003    201802031218            0


CREATE TABLE typer(
    id TINYINT PRIMARY KEY AUTO_INCREMENT,
    typer_name VARCHAR(20) NOT NULL,
    typer_id TINYINT NOT NULL,
    
    UNIQUE(typer_name),
    INDEX(typer_id)
);
INSERT INTO typer VALUES(1,'衣服',0);
INSERT INTO typer VALUES(2,'配飾',0);
INSERT INTO typer VALUES(3,'上衣',1);
INSERT INTO typer VALUES(4,'褲子',1);
INSERT INTO typer VALUES(5,'襪子',1);
INSERT INTO typer VALUES(6,'內衣',1);
INSERT INTO typer VALUES(7,'項鍊',2);
INSERT INTO typer VALUES(8,'手鐲',2);
INSERT INTO typer VALUES(9,'鑽戒',2);

CREATE TABLE goods(
    id TINYINT PRIMARY KEY AUTO_INCREMENT,
    goods_id INT NOT NULL,
    goods_name VARCHAR(50) NOT NULL,
    typer_id TINYINT NOT NULL,
    kucun INT NOT NULL,
    shop_id INT NOT NULL,
    
    UNIQUE(goods_id),
    INDEX(goods_name),
    INDEX(typer_id),
    INDEX(shop_id));
    
    DROP TABLE goods;
    
INSERT INTO goods VALUES(1,1001,'艾瑪夾克',3,1000,20171231);
INSERT INTO goods VALUES(2,1002,'艾瑪秋褲',4,1000,20171232);
INSERT INTO goods VALUES(3,1003,'艾瑪襪子',5,1000,20171233);
INSERT INTO goods VALUES(4,1004,'艾瑪內衣',6,1000,20171234);
INSERT INTO goods VALUES(5,1005,'艾瑪項鍊',7,1000,20171235);
INSERT INTO goods VALUES(6,1006,'艾瑪手鐲',8,1000,20171236);
INSERT INTO goods VALUES(7,1007,'艾瑪毛褲',4,1000,20171237);
INSERT INTO goods VALUES(8,1008,'艾瑪皮褲',4,1000,20171238);

CREATE TABLE my_order(
        id TINYINT PRIMARY KEY AUTO_INCREMENT,
        order_num INT NOT NULL,
        goods_id INT NOT NULL,
        user_id VARCHAR(30),
        add_time TIMESTAMP NOT NULL,
        pay_time TIMESTAMP,
        pay_state INT NOT NULL DEFAULT 0,
        FOREIGN KEY(goods_id) REFERENCES goods(goods_id),
        INDEX(goods_id),
        INDEX(user_id)
        );my_order


insert into `my_order` (`id`, `order_num`, `goods_id`, `user_id`, `add_time`, `pay_time`, `pay_state`) values('1','201802031213','1002','TianMao1003','2018-10-04 11:24:46','0000-00-00 00:00:00','0');
insert into `my_order` (`id`, `order_num`, `goods_id`, `user_id`, `add_time`, `pay_time`, `pay_state`) values('2','201802031215','1004','TianMao1003','2018-10-04 11:25:44','2018-02-03 14:13:56','1');
insert into `my_order` (`id`, `order_num`, `goods_id`, `user_id`, `add_time`, `pay_time`, `pay_state`) values('3','201802031216','1004','TianMao1003','2018-10-04 11:26:05','0000-00-00 00:00:00','0');
insert into `my_order` (`id`, `order_num`, `goods_id`, `user_id`, `add_time`, `pay_time`, `pay_state`) values('4','201802031019','1004','TianMao1003','2018-10-04 11:27:38','0000-00-00 00:00:00','0');

        
 ##查詢     
 SELECT * FROM my_order WHERE user_id = 'TianMao1003' AND pay_state=0 ORDER BY add_time DESC;
 
 ##分頁 
 SELECT * FROM my_order WHERE user_id = 'TianMao1003' AND pay_state=0 ORDER BY add_time DESC limit 0,1; 
 
        
 ##  查詢指定使用者的未支付的商品所屬的分類(先是訂單跟商品表根據商品id左連線得到使用者名稱,商品名稱,分類的編號,把結果作為一張新表在跟分類表連線得到 最終的結果)                
 SELECT pttable.muid as '使用者名稱',pttable.gtname AS '商品分類' , typer.typer_name AS '所屬分類' FROM (SELECT my_order.user_id as muid,my_order.goods_id AS mgid ,goods.goods_name
  AS gtname,goods.typer_id AS gtid FROM my_order LEFT JOIN goods ON my_order.goods_id = goods.goods_id
 WHERE my_order.user_id='TianMao1003' AND pay_state=0) AS pttable LEFT JOIN typer ON pttable.gtid = typer.id;
   結果: