SUBSTRING_INDEX в Ruby on Rails?

#mysql #sql #ruby-on-rails

#mysql #sql #ruby-on-rails

Вопрос:

Есть ли способ выполнить запрос в RoR, который давал бы те же результаты, что и следующий?

 SELECT SUBSTRING_INDEX(notes, ',' , 1) AS notes FROM <table> WHERE event = 'Bar'
  

Я пробовал и пробовал, но часть substring_index, похоже, не подходит для функции find_by_sql.

Обновление Это более точное отображение запроса, который я пытаюсь выполнить.

 SELECT SUBSTRING_INDEX(notes, ',', 1) notes, COUNT(*) cnt FROM <table> WHERE event = 'Foo' GROUP BY SUBSTRING_INDEX(notes, ',', 1) ORDER BY COUNT(*) DESC
  

Я близок к этому вызову:

 Foo.where("event = 'Foo'").group('notes').order('count_all').count()
  

Но это, очевидно, не совсем правильно.

Комментарии:

1. Почему вы не используете Ruby для получения подстроки?

2. Потому что то, что я пытаюсь сделать, на самом деле также группирует результаты по этому значению. Я просто упростил пример. Я обновлю его более сложным запросом, чтобы вы могли понять.

Ответ №1:

 Foo.select("SUBSTRING_INDEX(notes, ',', 1) AS notes, COUNT(*) AS cnt").
where(:event => "Foo").group('notes').order('cnt DESC')
  

Комментарии:

1. Это самое близкое, что я когда-либо видел! К сожалению, количество не отображается. Есть идеи?

2. На самом деле, похоже, проблема в том, что вы не можете сделать AS и изменить имя на что-то другое. Например, когда я изменил notes на AS notestwo, он ничего не отображает.