转换SQL" Concat"到Activerecord

时间:2015-06-17 08:39:50

标签: 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()):

2 个答案:

答案 0 :(得分:2)

我可能错了,但是在我看来,如果你重写查询以避免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), '%')")

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

答案 1 :(得分:0)

也许你想这样使用?

query = 'Ed Sheeran'

Client.where("first_name LIKE :query OR last_name LIKE :query", query: "%#{query}%")