#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, он ничего не отображает.