【问题标题】:Convert SQL "Concat" to Activerecord将 SQL“Concat”转换为 Activerecord
【发布时间】:2015-06-17 08:39:49
【问题描述】:

我有一个这样的 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()):

【问题讨论】:

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


    【解决方案1】:

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

    您的查询缺少逗号分隔。

    【讨论】:

    • 哦,是的!我缺少逗号分隔。非常感谢。
    【解决方案2】:

    也许你想这样使用?

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

    【讨论】:

      猜你喜欢
      • 2019-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 2013-04-25
      相关资源
      最近更新 更多