项目1111

news2024/11/19 7:41:40

中文显示姓名列和手机号

SELECT contact_name AS '姓名', contact_phone AS '手机号' FROM 2_公司id;

使用explain测试给出的查询语句,显示走了索引查询

EXPLAIN SELECT * FROM `7_订单数量` WHERE `countid` LIKE 'e%';

统计用户订单信息,查询所有用户的下单数量,并进行倒序排序。使用聚合函数查询所有用户的订单数量,倒序拍列结果

SELECT   user_id ,sum(count_id) as '订单数量' from `4_订单id`
GROUP BY user_id
ORDER BY sum(count_id)  DESC;

 

显示用户信息,显示用户钱包信息,进行多表联合查询

SELECT 1_用户id.username, 1_用户id.name, 8_账户表.balance,1_用户id.password,1_用户id.email,1_用户id.gender
FROM 1_用户id
JOIN 8_账户表 ON 1_用户id.user_id = 8_账户表.user_id;

查看订单中下单最多的产品对应的类别正确使用聚合函数,正确使用子查询

SELECT product_name
FROM (
    SELECT product_name, COUNT(*) AS order_count
    FROM 5_详情id
    GROUP BY product_name
) AS subquery
ORDER BY order_count DESC
LIMIT 1;

查询下单总金额最多的用户,并查询用户的全部信息与当前钱包余额。正确使用聚合函数,正确使用子查询,正确进行多表联合查询

SELECT u.*, a.balance
FROM 1_用户id u
JOIN 8_账户表 a ON u.user_id = a.user_id
WHERE u.user_id = (
    SELECT user_id
    FROM (
        SELECT user_id, SUM(price * quantity) AS total_amount
        FROM 4_订单id o
        JOIN 5_详情id d ON o.order_id = d.order_id
        GROUP BY user_id
    ) AS subquery
    ORDER BY total_amount DESC
    LIMIT 1
);

5、存储过程创建

1、添加一个用户下订单的存储过程,存储过程名称叫做【create_order_infos()】

2、要求传入创建订单所必须的参数内容,例如:用户编号、商品编号、购买数量等信息。

3、需要根据传入的信息插入【用户钱包交易日志表】、【订单表】、【订单详情表】信息,修改【用户钱包表】、【商品表】。

因为没有product表需先创建

CREATE TABLE `product` (
  `product_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '商品ID',
  `product_name` varchar(100) NOT NULL COMMENT '商品名称',
  `price` decimal(10,2) NOT NULL COMMENT '价格',
  `stock` int(11) NOT NULL COMMENT '库存',
  PRIMARY KEY (`product_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;



INSERT INTO `product` VALUES (1, '手机', 5999.00, 10);
INSERT INTO `product` VALUES (2, '耳机', 299.00, 20);

然后完成存储过程

DELIMITER //
CREATE PROCEDURE create_order_infos(
    IN in_user_id INT,
    IN in_product_id INT,
    IN in_quantity INT
)
BEGIN
    DECLARE product_price DECIMAL(10,2);
    DECLARE product_stock INT;
    DECLARE user_balance DECIMAL(10,2);
    DECLARE order_number VARCHAR(50);
    DECLARE order_id INT;
    DECLARE detail_id INT;

    -- 获取商品价格和库存
    SELECT price, stock INTO product_price, product_stock
    FROM product
    WHERE product_id = in_product_id;

    -- 检查库存是否足够
    IF product_stock < in_quantity THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '库存不足';
    END IF;

    -- 获取用户余额(这里假设用户只有一个账户)
    SELECT balance INTO user_balance
    FROM 8_账户表
    WHERE user_id = in_user_id;

    -- 检查余额是否足够
    IF user_balance < (product_price * in_quantity) THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '余额不足';
    END IF;

    -- 生成订单编号(这里简化为拼接当前时间)
    SET order_number = CONCAT('ORD', DATE_FORMAT(NOW(), '%Y%m%d%H%i%s'));

    -- 插入订单表
    INSERT INTO 4_订单id (user_id, company_id, order_number, order_date, status_id, count_id)
    VALUES (in_user_id, 1, order_number, CURDATE(), 1, in_quantity); -- 假设默认公司ID为1,状态为待发货
    SET order_id = LAST_INSERT_ID(); -- 获取最新插入的订单ID

    -- 插入订单详情表
    INSERT INTO 5_详情id (order_id, product_name, quantity, price, category)
    SELECT order_id, product_name, in_quantity, product_price, '电子产品' -- 假设所有商品都是电子产品
    FROM product
    WHERE product_id = in_product_id;

    -- 更新商品库存
    UPDATE product
    SET stock = stock - in_quantity
    WHERE product_id = in_product_id;

    -- 更新用户余额(这里简化处理,不记录交易日志)
    UPDATE 8_账户表
    SET balance = balance - (product_price * in_quantity)
    WHERE user_id = in_user_id;

    -- 返回订单ID(这里通过SELECT返回,而不是OUT参数)
    SELECT order_id;
END //
DELIMITER ;

测试语句

-- 有一个用户id为5,二号商品,购买数量为1的商品
set @user_id=5;
set @product_id=2;
set @in_quantity=1;
set @order_id=NULL;
CALL create_order_infos(@user_id,@product_id,@in_quantity);
select @order_id;

-- 有一个用户id为1,一号商品,购买数量为1的商品
set @user_id=1;
set @product_id=1;
set @in_quantity=1;
set @order_id=NULL;
CALL create_order_infos(@user_id,@product_id,@in_quantity);
select @order_id;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1867337.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于 GD32F450 的Zephyr 的基本测试-编译工程

一、cmake 编译 hello world 测试 打开示例工程 hello world cd ~/zephyrproject/zephyr/samples/hello_world新建 build 目前&#xff0c;用于存放临时文件目录&#xff0c;并进入该目录 mkdir -p build && cd build通过 cmake 指令 生成 gd32f450z 工程的 makefil…

Shell 编程入门

优质博文&#xff1a;IT-BLOG-CN 【1】x.sh文件内容编写&#xff1a; 固定开头&#xff1a;#&#xff01;/bin/sh&#xff1b; 【2】学习的第一个命令就是echo输出的意思&#xff1b; 【3】其实shell脚本也就是在文件中写命令&#xff0c;但是我们要写的是绝对路径&#xff1a…

k8s token加新节点

在 master 节点执行 kubeadm token create --print-join-command得到token和cert&#xff0c;这两个参数在2个小时内可以重复使用&#xff0c;超过以后就得再次生成 kubeadm join apiserver.k8s.com --token mpfjma.4vjjg8flqihor4vt --discovery-token-ca-cert-hash sha…

C++ | Leetcode C++题解之第199题二叉树的右视图

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> rightSideView(TreeNode* root) {unordered_map<int, int> rightmostValueAtDepth;int max_depth -1;stack<TreeNode*> nodeStack;stack<int> depthStack;nodeStack.push(ro…

测试开发工程师需要掌握什么技能?

测试开发工程师是软件开发中至关重要的角色之一。他们负责编写、维护和执行自动化测试脚本、开发测试工具和框架&#xff0c;以确保软件的质量和稳定性。为了成为一名优秀的测试开发工程师&#xff0c;你需要掌握以下技能&#xff1a; 1. 编程技能&#xff1a; 作为测试开发工…

构建网络图 (JavaScript)

前序&#xff1a;在工作中难免有一些千奇百怪的需求&#xff0c;如果你遇到构建网络图&#xff0c;或者学习应对未来&#xff0c;请看这边文章&#xff0c;本文以代码为主。 网络图是数据可视化中实用而有效的工具&#xff0c;特别适用于说明复杂系统内的关系和连接。这些图表…

排序算法系列二:归并排序、快速排序

零、说在前面 本文是一个系列&#xff0c; 入口请移步这里 一、理论部分 1.4&#xff1a;归并排序 1.4.1&#xff1a;算法解读&#xff1a; 使用二分法和插入排序两种算法的思想来实现。流程分为“拆分”、“合并”两大部分&#xff0c;前者就是普通的二分思想&#xff0c;将…

文生视频模型Sora刷屏的背后的数据支持

前言&#xff1a;近日&#xff0c;OpenAI的首个文生视频模型Sora横空出世&#xff0c;引发了一波Sora热潮。与其相关的概念股连续多日涨停&#xff0c;多家媒体持续跟踪报道&#xff0c;央视也针对Sora进行了报道&#xff0c;称这是第一个真正意义上的视频生成大模型。 01 …

VisualRules组件功能介绍-计算表格(一)

一、本章内容 2、计算表格是什么 3、计算表格的比较优势 4、计算表格基本功能展示 5、计算表格基本操作 6、特别说明 二、计算表格是什么 计算表格作为VisualRules规则引擎的核心组件&#xff0c;提供了一种在内存中高效处理数据的方法。通过将外部数据导入计算表格&#x…

C++入门 list的模拟实现

目录 list的节点类 list的迭代器类 list的模拟实现 要模拟实现list&#xff0c;必须要熟悉list的底层结构以及其接口的含义&#xff0c;通过之前学习&#xff0c;这些内容已基本掌握&#xff0c;现在我们来模拟实现list。 参照带头双向循环链表的结构&#xff0c;我们可以建…

DVWA 靶场 File Upload 通关解析

前言 DVWA代表Damn Vulnerable Web Application&#xff0c;是一个用于学习和练习Web应用程序漏洞的开源漏洞应用程序。它被设计成一个易于安装和配置的漏洞应用程序&#xff0c;旨在帮助安全专业人员和爱好者了解和熟悉不同类型的Web应用程序漏洞。 DVWA提供了一系列的漏洞场…

1.x86游戏实战-认识CE

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 链接&#xff1a;https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd6tw3 提取码&#xff1a;6tw3 复…

ARCGIS添加在线地图

地图服务地址&#xff1a;http://map.geoq.cn/ArcGIS/rest/services 具体方法&#xff1a; 结果展示&#xff1a;

vue2 + dataV 组件问题

在使用 dataV 过程中&#xff0c;遇见 svg 动画不加载问题。 一、理想状态下&#xff1a; 二、开发中遇到的 加载不出来问题。 解决方案 在查找官方资料中&#xff0c;提到使用 key 可以解决方案。 1 绑定 key 2 改变 key 值 注意&#xff1a;一定要在 $nextTick 里面执…

PLC梯形图(置位与复位)的使用方法

置位指令相当于我们把照明灯的开关按到开的状态&#xff0c;即便我们把手离开&#xff0c;开关也是通的&#xff0c;灯也是亮的。 想要关闭必须要把它按到关的状态&#xff0c;即使用复位指令。 复位指令相当于我们把照明灯的开关按到关的状态&#xff0c;把手离开&#xff0…

49-3 内网渗透 - MSI安 装策略提权

靶场环境搭建: 这里还是用我们之前的windows2012虚拟机进行搭建 1)打开一些设置让靶场存在漏洞 打开组策略编辑器(gpedit.msc) 使用运行命令打开: 按下 Win + R 组合键来打开运行对话框。输入 gpedit.msc,然后按下 Enter 键。使用搜索打开: 点击任务栏上的搜索框(W…

Redis数据库(六):主从复制和缓存穿透及雪崩

目录 一、Redis主从复制 1.1 概念 1.2 主从复制的作用 1.3 实现一主二从 1.4 哨兵模式 1.4.1 哨兵的作用 1.4.2 哨兵模式的优缺点 二、Redis缓存穿透和雪崩 2.1 缓存穿透——查不到 2.1.1 缓存穿透解决办法 2.2 缓存击穿 - 量太大&#xff0c;缓存过期 2.2.1 缓存…

排序算法之java语言实现

零、说在前面 近期打算复习java的几种排序算法&#xff0c;我会将这些排序算法的实现代码、个人心得、时间复杂度分析&#xff0c;算法间的对比做成一个系列帖子&#xff0c;这里作为那些帖子的汇总而存在。 这个系列的框架会包含&#xff1a;概念、实现、时间空间复杂度…

鸿萌数据迁移业务案例:为医药客户成功迁移重要科研数据

天津鸿萌科贸发展有限公司对 Windows 及 Linux 系统下的各类型备份及数据迁移业务积累了丰富的业务经验&#xff0c;可提供针对性的解决方案。 医药科研数据迁移成功案例 2024年6月初&#xff0c;天津某医药厂家埃尔法 workstation2020 服务器硬盘老化&#xff0c;为保证服务…

记录一次即将出现的钓鱼新方式

钓鱼通常是内网渗透过程中的最为常见的入口方式&#xff0c;但是随着蓝队人员溯源反制思路开阔&#xff0c;入侵排查能力提升&#xff0c;钓鱼也越来越困难&#xff0c;这里就记一种不同寻常的钓鱼方式。 pip install 的执行流程&#xff1a; 先获取到远端的服务器地址 url 比…