gpt4 book ai didi

mysql - 存储用于执行的 SQL 命令的位置

转载 作者:IT老高 更新时间:2023-10-28 23:17:49 25 4
gpt4 key购买 nike

由于内联 mysql 查询,我们面临代码质量问题。自己编写的 mysql 查询确实会使代码困惑,也会增加代码库等。

我们的代码充满了诸如

之类的东西
/* beautify ignore:start */
/* jshint ignore:start */
var sql = "SELECT *"
+" ,DATE_ADD(sc.created_at,INTERVAL 14 DAY) AS duedate"
+" ,distance_mail(?,?,lat,lon) as distance,count(pks.skill_id) c1"
+" ,count(ps.profile_id) c2"
+" FROM TABLE sc"
+" JOIN "
+" PACKAGE_V psc on sc.id = psc.s_id "
+" JOIN "
+" PACKAGE_SKILL pks on pks.package_id = psc.package_id "
+" LEFT JOIN PROFILE_SKILL ps on ps.skill_id = pks.skill_id and ps.profile_id = ?"
+" WHERE sc.type in "
+" ('a',"
+" 'b',"
+" 'c' ,"
+" 'd',"
+" 'e',"
+" 'f',"
+" 'g',"
+" 'h')"
+" AND sc.status = 'open'"
+" AND sc.crowd_type = ?"
+" AND sc.created_at < DATE_SUB(NOW(),INTERVAL 10 MINUTE) "
+" AND sc.created_at > DATE_SUB(NOW(),INTERVAL 14 DAY)"
+" AND distance_mail(?, ?,lat,lon) < 500"
+" GROUP BY sc.id"
+" HAVING c1 = c2 "
+" ORDER BY distance;";
/* jshint ignore:end */
/* beautify ignore:end */

我不得不稍微模糊一下代码。

如您所见,在您的代码中重复出现这种情况是不可读的。也因为 atm 我们不能去 ES6,这至少可以让字符串变得漂亮一点,这要归功于多行字符串。

现在的问题是,有没有办法将 SQL 过程存储在一个地方?作为附加信息,我们使用 node (~0.12) 和 express 来公开 API,访问 MySQL 数据库。

我已经考虑过,使用 JSON 会导致更大的困惑。另外,由于 JSON 的字符集有点严格,而且 JSON 也可能不喜欢多行字符串,因此它甚至可能都不可能。

然后我想出了将 SQL 存储在文件中并在 Node 应用程序启动时加载的想法。这是目前我在一个地方获取 SQL 查询并将它们提供给其余 Node 模块的最佳方法。这里的问题是,使用一个文件?每个查询使用一个文件?每个数据库表使用一个文件?

感谢任何帮助,我不能成为地球上第一个解决此问题的人,所以也许有人有一个可行的、不错的解决方案!

PS:我尝试使用像 squel 这样的库,但这并没有真正的帮助,因为我们的查询很复杂,如您所见。它主要是将我们的查询放入“查询中心”。

最佳答案

我更喜欢将每个更大的查询放在一个文件中。这样你就可以有语法高亮并且很容易在服务器启动时加载。为了构建它,我通常为所有查询创建一个文件夹,并在该文件夹中为每个模型创建一个文件夹。

# queries/mymodel/select.mymodel.sql
SELECT * FROM mymodel;

// in mymodel.js
const fs = require('fs');
const queries = {
select: fs.readFileSync(__dirname + '/queries/mymodel/select.mymodel.sql', 'utf8')
};

关于mysql - 存储用于执行的 SQL 命令的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39343095/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com