Как создать запрос к базе?

InstantCMS 2.X
#1 21 декабря 2018 в 11:08
Привет всем. Надо получить 10 самых высокооплачиваемых блогеров.
В базе есть таблица лог билинга, как с помощью инстантовских запросов получить желаемое.
В документации ни слова нет о том как и что просить в базе. Все что удавалось узнать это случайно из видеотуториалов или ковыряясь в коде. Как работают агрегатные функции вообще нигде не попадалось…
Помогите кто в теме!
#2 21 декабря 2018 в 11:17
В админке же показывает кто самый богатый.
#3 21 декабря 2018 в 11:18
Рачей, технически:

1. Запрашиваем пользователя с самым большим балансом?
2. Считываем его "имя"

3. Выводим
#4 21 декабря 2018 в 11:34

Как работают агрегатные функции вообще нигде не попадалось…

Рачей
Они работают так же, как и должны согласно документации MySQL) Отдельная документация для них и не нужна.

В админке же показывает кто самый богатый.

@Milyana

1. Запрашиваем пользователя с самым большим балансом?

@IRIPUS
Вы путаете "богатый" и "высокооплачиваемый". Богатый — это у кого баланс высокий. А высокооплачиваемый — у кого оборот самый большой, или средний чек большой.

Рачей, в модели есть метод select(), в котором вы можете указать что вам нужно вытащить из базы. Например select('SUM('sum')', 'oborot')
В крайнем случае если прям совсем сложно будет разобраться — можете хоть на голом sql запрос написать и запустить через $model->db->query($sql);
#5 21 декабря 2018 в 11:43


Рачей, в модели есть метод select(), в котором вы можете указать что вам нужно вытащить из базы. Например select('SUM('sum')', 'oborot')
В крайнем случае если прям совсем сложно будет разобраться — можете хоть на голом sql запрос написать и запустить через $model->db->query($sql);

@SmartControl

Спасибо. Я не то искал… Я думал у них уже написаны агрегатные запросы при помощи каких то своих замутов типа
->filterLt() или
selectOnly(
#6 21 декабря 2018 в 12:52
Я сегодня туплю с утра.
Как мне сделать сортировку по профиту?
  1.  
  2. $model->selectOnly('user_id, SUM(amount) AS profit, summ, nickname')
  3. ->filterGt('type', '0')
  4. ->filterIsNull('summ')
  5. ->groupBy('user_id')
  6. ->limit('10')
  7. ;
  8. $model->joinLeft('cms_users', 'u', 'u.id = i.user_id');
  9.  
Капец какой-то…
#7 21 декабря 2018 в 13:32
  1. ->orderBy('profit')
#8 21 декабря 2018 в 13:34


  1. ->orderBy('profit')

Loadырь

Пробовал я и так, и порядковым номером столбца
  1.  
  2. Ошибка в запросе БД:
  3. Неизвестный столбец 'i.profit' в 'order clause'
  4.  
  5. SELECT user_id, SUM(amount) AS profit, nickname
  6. FROM cms_billing_log i
  7. LEFT JOIN cms_users as u ON u.id = i.user_id
  8. WHERE (i.type > '0') AND (i.summ IS NULL)
  9. GROUP BY i.user_id
  10. ORDER BY i.profit desc
  11. LIMIT 10
  12. Последние вызовы:
  13.  
#9 21 декабря 2018 в 13:46
Рачей, меняйте поле $model->order_by напрямую

$model->order_by = 'profit desc';

Модель автоматом подставляет "i." если вызывать метод orderBy
#10 21 декабря 2018 в 13:51


Рачей, меняйте поле $model->order_by напрямую

$model->order_by = 'profit desc';

Модель автоматом подставляет "i." если вызывать метод orderBy

@SmartControl
Cпасибо!!! Сработало.😊
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.