forked from lglglglgy/RESTROUNT_SQL
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWindow_Menu.sql
More file actions
131 lines (103 loc) · 3.51 KB
/
Window_Menu.sql
File metadata and controls
131 lines (103 loc) · 3.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
DELIMITER //
CREATE PROCEDURE CreateWindowViews()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE current_wid INT;
DECLARE current_wadd INT;
DECLARE cur CURSOR FOR SELECT Wid, Wadd FROM win;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 打开游标
OPEN cur;
fetch_loop: LOOP
FETCH cur INTO current_wid, current_wadd;
IF done THEN
LEAVE fetch_loop;
END IF;
-- 动态创建视图的 SQL
SET @view_name = CONCAT('floor_', current_wadd, '_', current_wid);
SET @create_view_sql = CONCAT(
'CREATE OR REPLACE VIEW ', @view_name, ' AS ',
'SELECT veg.Vid, veg.Vname, veg.Vprice, ',
'GROUP_CONCAT(DISTINCT cook.Cname ORDER BY cook.Cname SEPARATOR \', \') AS CookNames ',
'FROM whv ',
'INNER JOIN veg ON whv.Vid = veg.Vid ',
'INNER JOIN cmv ON cmv.Vid = veg.Vid ',
'INNER JOIN cook ON cmv.Cid = cook.Cid ',
'WHERE whv.Wid = ', current_wid, ' ',
'GROUP BY veg.Vid, veg.Vname, veg.Vprice'
);
-- 执行动态 SQL 创建视图
PREPARE stmt FROM @create_view_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END LOOP;
-- 关闭游标
CLOSE cur;
END //
DELIMITER ;
-- 根据 win 表中的数据动态创建多个视图,每个视图包含与特定窗口相关的菜品及其对应的厨师信息。
DELIMITER //
CREATE PROCEDURE QueryVegPurchases(IN dish_id INT)
BEGIN
SELECT
bbv.Vid AS DishID,
veg.Vname AS DishName,
buy.Bid AS UserID,
buy.Bname AS UserName,
bbv.Bnum AS Quantity,
bbv.Btime AS PurchaseDate
FROM
bbv
INNER JOIN veg ON bbv.Vid = veg.Vid
INNER JOIN buy ON bbv.Bid = buy.Bid
WHERE
bbv.Vid = dish_id
ORDER BY
bbv.Btime DESC;
END //
DELIMITER ;
-- 根据传入的菜品 ID 查询所有窗口的该菜品的所有购买记录,并返回相关信息,包括菜品 ID、菜品名称、用户 ID、用户名、购买数量和购买日期。通过调用这个存储过程,后端可以方便地获取指定菜品的购买记录。
DELIMITER //
CREATE PROCEDURE QueryWindowVegPurchases(
IN query_date DATE,
IN window_id INT
)
BEGIN
-- 动态查询指定窗口和日期的数据
SET @query_sql = CONCAT(
'SELECT veg.Vid AS DishID, veg.Vname AS DishName, ',
'buy.Bid AS UserID, buy.Bname AS UserName, ',
'bbv.Bnum AS Quantity, bbv.Btime AS PurchaseDate ',
'FROM bbv ',
'INNER JOIN veg ON bbv.Vid = veg.Vid ',
'INNER JOIN buy ON bbv.Bid = buy.Bid ',
'INNER JOIN whv ON whv.Vid = veg.Vid ',
'WHERE whv.Wid = ', window_id, ' ',
'AND DATE(bbv.Btime) = "', query_date, '" ',
'ORDER BY bbv.Btime DESC'
);
-- 准备并执行查询
PREPARE stmt FROM @query_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
-- 动态创建视图,每个视图包含某个窗口的每个菜品在同一天的购买记录
DELIMITER //
CREATE PROCEDURE GetViewData(IN view_name VARCHAR(255))
BEGIN
SET @query = CONCAT('SELECT * FROM ', view_name);
PREPARE stmt FROM @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
DELIMITER //
CREATE PROCEDURE GetTop5Windows()
BEGIN
SELECT *
FROM win
ORDER BY Wid DESC
LIMIT 5;
END//
DELIMITER ;