将 SQL "Concat" 转换为 Activerecord
Convert SQL "Concat" to 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()):
也许您想这样使用?
query = 'Ed Sheeran'
Client.where("first_name LIKE :query OR last_name LIKE :query", query: "%#{query}%")
我可能错了,但在我看来,如果您重写查询以避免 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), '%')")
您的查询缺少一些逗号分隔符。
我有一个 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()):
也许您想这样使用?
query = 'Ed Sheeran'
Client.where("first_name LIKE :query OR last_name LIKE :query", query: "%#{query}%")
我可能错了,但在我看来,如果您重写查询以避免 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), '%')")
您的查询缺少一些逗号分隔符。