mysql - 将 SQL "Concat"转换为 Activerecord

标签 mysql sql ruby-on-rails rails-activerecord

我有一个像这样的 SQL 查询:

select * from clients where 'Ed Sheeran' like Concat(Concat('%',first_name),'%') 
or 'Ed Sheeran' like Concat(Concat('%',last_name),'%')

我想将查询转换为事件记录。

我尝试将其转换:

Client.joins(:cases).where(''Ed Sheeran' LIKE CONCAT(CONCAT('%'first_name, )'%')' OR 'Ed Sheeran' LIKE CONCAT(CONCAT('%'last_name, )'%')')

但是我得到了这个结果:

Incorrect parameter count in the call to native function 'CONCAT': SELECT COUNT(*) FROM `clients` INNER JOIN `cases` ON `cases`.`client_id` = `clients`.`id` AND `cases`.`deleted_at` IS NULL WHERE `clients`.`deleted_at` IS NULL AND ('%Ed Sheeran%' LIKE CONCAT(CONCAT()):

最佳答案

我可能是错的,但在我看来,如果您重写查询以避免 YODA 风格,您可以轻松摆脱双重连接

select * from clients where 'Ed Sheeran' like Concat(Concat('%',first_name),'%') 
or 'Ed Sheeran' like Concat(Concat('%',last_name),'%')

SELECT * 
FROM clients 
WHERE 
    first_name LIKE "%Ed Sheeran%" OR
    last_name LIKE "%Ed Sheeran%"

和 ActiveRecord 中

Client.joins(:cases).where("first_name LIKE :query OR last_name LIKE :query", query: "%Ed Sheeran%")

如果情况并非如此,则这是另一个查询。

Client.joins(:cases).where("'Ed Sheeran' LIKE CONCAT(CONCAT('%', first_name), '%') OR 'Ed Sheeran' LIKE CONCAT(CONCAT('%', last_name), '%')")

您的查询缺少一些逗号分隔。

关于mysql - 将 SQL "Concat"转换为 Activerecord,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30886442/

相关文章:

php - PHP中的分页问题

mysql - 如何选择外键关系元素仅及时过去或根本不存在的行

ruby-on-rails - 删除确认轨

jquery - 选择的 rails gem 不工作

sql - BigQuery 替换了我的大部分 Spark 作业,我是否遗漏了什么?

ruby-on-rails - 如何使用 devise_invitable 删除邀请?

mysql - 在 MySQL 中使用时间戳存储大量数据的最佳方法

java - 如何将此 MySQL 查询转换为 Hibernate 查询

mysql - 清空关系数据库模式

MySql - 如何组合两个表的 where 子句以进行一对多连接?