上一篇
"小张,马上给我最近三个月华北区的销售明细,按产品分类统计,对了,顺便看看退货率超过5%的品类有哪些!"
市场总监王总端着咖啡站在你身后时,你肯定不希望手忙脚乱地打开十几个Excel表格,这时,一个能实时响应查询的Web数据系统就是你的救命稻草,今天我们就来聊聊如何用Ajax+SQL搭建会"说话"的动态数据库查询系统。
老式做法:
现代方案:
前端输入条件 → Ajax发送请求 → 后端执行SQL → 实时渲染结果
(王总刚回到办公室就能在浏览器看到动态图表)
HTML:搭建查询表单和结果展示区
<div class="query-box"> <input type="date" id="startDate"> <select id="region"> <option value="north">华北</option> <option value="east">华东</option> </select> <button onclick="fetchData()">查询</button> </div> <div id="result"></div>
JavaScript:处理Ajax请求
function fetchData() { const params = { start: document.getElementById('startDate').value, region: document.getElementById('region').value }; fetch('/api/sales', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(params) }) .then(response => response.json()) .then(data => { document.getElementById('result').innerHTML = `<table>${data.map(row => `<tr><td>${row.product}</td><td>${row.sales}</td></tr>`).join('')}</table>`; }); }
app.post('/api/sales', (req, res) => { const { start, region } = req.body; const sql = ` SELECT product, SUM(amount) as sales FROM orders WHERE date >= ? AND region = ? GROUP BY product `; pool.query(sql, [start, region], (err, results) => { if(err) return res.status(500).send(err); res.json(results); }); });
let timer; document.getElementById('searchInput').addEventListener('input', () => { clearTimeout(timer); timer = setTimeout(fetchData, 300); // 停止输入300ms后发起请求 });
-- MySQL分页 SELECT * FROM products WHERE category = '电子产品' LIMIT 20 OFFSET 40; -- 第3页(每页20条)
配合Chart.js等库,查询返回数据后即时生成可视化图表:
new Chart(ctx, { type: 'bar', data: { labels: data.map(item => item.month), datasets: [{ label: '销售额', data: data.map(item => item.total) }] } });
fetch('/api/data') .then(response => { if(!response.ok) throw new Error('网络响应异常'); return response.json(); }) .catch(error => { console.error('捕获到错误:', error); showToast('查询失败,请重试'); });
电商后台实现多条件组合查询:
SELECT * FROM products WHERE (price BETWEEN ? AND ?) AND (category IN (?, ?, ?)) AND (stock > 0) ORDER BY CASE WHEN ? = 'price_asc' THEN price END ASC, CASE WHEN ? = 'sales_desc' THEN sales END DESC
定时轮询最新数据:
setInterval(() => { fetchData(); }, 10000); // 每10秒刷新
掌握了这套实时数据查询方案后,当下次王总突然出现时,你可以从容地打开浏览器:"您需要的数据在这里,点击这个下拉框还可以切换时间维度..." 更聪明的做法是提前把常用查询做成可视化仪表盘——毕竟,让领导自己点按钮查询,比等着你导出Excel要优雅得多。
(本文技术方案验证环境:MySQL 8.0 + Node.js 18 + Chrome浏览器,数据截至2025年8月)
本文由 於和雅 于2025-08-02发表在【云服务器提供商】,文中图片由(於和雅)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/513500.html
发表评论