在哪里存储要执行的SQL命令

m4mbax

由于内联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过程存储在一个地方?作为附加信息,我们使用节点(〜0.12)并表示要公开API,并访问MySQL数据库。

我已经考虑过,使用JSON将导致更大的混乱。另外,这甚至是不可能的,因为JSON的字符集有点严格,并且JSON可能也不会喜欢具有多行字符串。

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

非常感谢您的帮助,我不能成为第一个解决此问题的人,所以也许有人有一个有效的解决方案!

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

约翰尼斯·梅兹(Johannes Merz)

我更喜欢将每个更大的查询都放在一个文件中。这样,您可以突出显示语法,并且很容易在服务器启动时加载。为了构建这种结构,我通常对所有查询都有一个文件夹,而对于每个模型都具有一个文件夹。

# 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')
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

bash在哪里存储执行命令的时间?

来自分类Dev

在执行之前,命令行存储在哪里?

来自分类Dev

启动命令存储在哪里?

来自分类Dev

SparkDataframe.load(),当我执行加载命令时,我的数据实际存储在哪里?

来自分类Dev

Windows在哪里存储要卸载的MSI文件?

来自分类Dev

X以SLiM开头时在哪里放置要运行的命令

来自分类Dev

sql正文的末尾存储过程(在哪里?)

来自分类Dev

“葡萄酒”程序执行日志存储在哪里?

来自分类Dev

bluetoothctl在哪里存储命令历史记录?

来自分类Dev

在哪里执行验证

来自分类Dev

使缓存存储在哪里?

来自分类Dev

JSESSIONID存储在哪里?

来自分类Dev

枚举存储在哪里?

来自分类Dev

JSESSIONID存储在哪里?

来自分类Dev

tls命令在哪里?

来自分类Dev

读取命令在哪里?

来自分类Dev

默认情况下,MySQL在哪里存储.sql文件?

来自分类Dev

SQL Server中存储的视图定义在哪里

来自分类Dev

Ubuntu上的官方Android模拟器在哪里?(要独立于Android Studio执行)

来自分类Dev

在哪里可以为所有交互式非登录Shell运行要运行的命令?

来自分类Dev

在哪里可以为所有交互式非登录Shell运行要运行的命令?

来自分类Dev

“等待的”任务在哪里执行?

来自分类Dev

mysql在哪里存储数据?

来自分类Dev

AspnetIdentity在哪里存储UserToken?

来自分类Dev

ServiceWorker数据存储在哪里?

来自分类Dev

节点的证书存储在哪里?

来自分类Dev

Zeitgeist在哪里存储数据?

来自分类Dev

崇高的主题存储在哪里?

来自分类Dev

SSL证书存储在哪里?