MYSQL XDEVAPI 多或(二)请求

Posted

技术标签:

【中文标题】MYSQL XDEVAPI 多或(二)请求【英文标题】:MYSQL XDEVAPI Multiple OR (II) Request 【发布时间】:2021-09-14 18:05:08 【问题描述】:

我正在使用 XDEVAPI 并尝试在 javascript 中使用 or(||) 语句,但它似乎在 1 个 or/(||) 语句之后中断,我有 5 个单独的状态我试图从中提取数据库:

.select(['customer_name',
         'account_status',
                  ])
         .where('customer_name like :customer_name && account_status like :account_status || account_status like :account_status || account_status like :account_status')
         .bind('customer_name', customer_name)
         .bind('account_status', 'Some_Status_1')
         .bind('account_status','Some_Status_2')
         .bind('account_status', 'Some_Status_3')
         .execute()

我可以使用 REGEXP 'Some_Status_1'|Some_Status_2'|等等?

如果是这样,语法是什么?

或者我还缺少另一种方法。

感谢您提供的任何帮助。

【问题讨论】:

【参考方案1】:

我认为该问题与 OR 本身无关,而是与您使用重复的占位符有关。 CRUD 样式 API 使用命名参数,如 here 所述。通过多次调用bind('account_status', 'something'),您只是替换了account_status 占位符的最后一个值。

要做你想做的事(我认为),你需要使用不同的占位符名称。例如:

.select(['customer_name', 'account_status'])
  .where('customer_name like :customer_name && account_status like :account_status1 || account_status like :account_status2 || account_status like :account_status3')
  .bind('customer_name', customer_name)
  .bind('account_status1', 'Some_Status_1')
  .bind('account_status2', 'Some_Status_2')
  .bind('account_status3', 'Some_Status_3')
  .execute()

免责声明:我是 Node.js 的 mysql X DevAPI 连接器的首席开发人员

【讨论】:

这工作得很好,除了新的更新,为了得到正确的结果,我添加了一个内联括号` .where('customer_name like :customer_name && (account_status like :account_status1 || account_status like :account_status2 || account_status 像 :account_status3)') ` 运算符优先规则是典型的,我猜。但是您所说的“新更新除外”是什么意思?行为是否以某种方式被破坏? 瑞,我猜是说我更新了npm包,然后加上括号就可以了。不确定这是javascript语法问题还是更新的一部分,但现在效果很好。即将有另一个问题。

以上是关于MYSQL XDEVAPI 多或(二)请求的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Mac 上安装 php 扩展“mysql_xdevapi”

MySQL XDevAPI 如何返回成功状态

使用 SSL 和 X 协议的 NodeJS mysql/xdevapi '访问被拒绝'

@mysql/xdevapi ECONNREFUSED 不释放连接

mysql-xdevapi getCollections 承诺返回值

@mysql/xdevapi 如何在nodejs中调试“插入的行中错误的字段数”?