Intereting Posts
Захват хэша (#) из URL-адреса в CodeIgniter PHP – копирование изображения на мой сервер прямо из URL Получение статического свойства из класса с динамическим именем класса в PHP Не предоставляйте никому доступа в каталоге .htaccess Я пытаюсь вычеркнуть что-либо до '=', а также конкретные слова Regex для соответствия цветам CSS Удаление фреймов и загрузка содержимого в div Библиотека PHP для преобразования JSON в CSV? Манипулировать строку URL, добавляя параметры GET Пошаговое руководство. Как выполнить Xdebug по устранению неполадок подключения к IDE клиента move_uploaded_file дает сообщение об ошибке «не удалось открыть поток: разрешено» после всех конфигураций, которые я сделал Обновить таблицу на основе условия (While Loop) Является ли хорошее знание PHP необходимым для создания устанавливаемого шаблона для таких CMS, как WordPress, Joomla или Drupal? Paypal не может подключиться к серверу Sandbox. Ошибка возврата 14077410 (отказ от сбоев связи sslv3) Шаги для отладки php Curl на окнах

Значения нескольких столбцов MySQL с условиями

У меня есть следующая схема (две таблицы):

**APPS** | ID (bigint) | USERID (Bigint) | USAGE_START_TIME (datetime) | ------------------------------------------------------------------ | 1 | 12 | 2013-05-03 04:42:55 | | 2 | 12 | 2013-05-12 06:22:45 | | 3 | 12 | 2013-06-12 08:44:24 | | 4 | 12 | 2013-06-24 04:20:56 | | 5 | 13 | 2013-06-26 08:20:26 | | 6 | 13 | 2013-09-12 05:48:27 | **USAGE** | ID (bigint) | APPID (bigint) | DEVICEID (bigint) | HIGH_COUNT (bigint) | MEDIUM_COUNT (bigint) | -------------------------------------------------------------------------------------------------------- | 1 | 1 | 2 | 400 | 200 | | 2 | 1 | 3 | 200 | 100 | | 3 | 2 | 3 | 350 | 40 | | 4 | 3 | 4 | 2 | 400 | | 5 | 4 | 2 | 4 | 30 | | 6 | 5 | 3 | 50 | 300 | 

Объяснение:

Итак, есть две таблицы. Теперь я хочу найти следующее:

Учитывая USERID, получите сумму HIGH_COUNT & MEDIUM_COUNT. При подсчете SUM следует позаботиться о том, чтобы: Если в ИСПОЛЬЗОВАНИИ одно и то же устройство используется более одного раза, то при вычислении суммы следует учитывать запись, которая имеет самую последнюю информацию (на основе APPS.USAGE_START_TIME).

Например:

Для вышеприведенной схемы результат должен быть (для userid = 12):

  | HIGH_COUNT (bigint) | MEDIUM_COUNT (Bigint) | ----------------------------------------------- | 356 | 470 | 

SQL Fiddle: http://sqlfiddle.com/#!2/74ae0f

Если пользователь использует несколько APPS на одном устройстве, этот запрос будет использовать строку APPS с самым высоким значением usage_start_time :

 select a.userid , sum(u.high_count) , sum(u.medium_count) from apps a join `usage` u on u.appid = a.id join ( select u.device_id , a.userid , max(a.usage_start_time) as max_start_time from apps a join `usage` u on u.appid = a.id group by u.device_id , a.userid ) filter on filter.device_id = u.device_id and filter.userid = a.userid and filter.max_start_time = a.usage_start_time group by a.userid 

В вашем наборе данных он будет выбирать строки использования 5, 3, 4 для пользователя 12 .

Посмотрите, как работает SQL Fiddle.

Я не могу получить ваши номера, но что-то вроде этого должно работать …

 SELECT a.userid , SUM(u.high_count) , SUM(u.medium_count) FROM apps a JOIN `usage` u ON u.appid = a.id JOIN ( SELECT userid , deviceid , MAX(usage_start_time) max_usage_start_time FROM apps a JOIN `usage` u ON u.appid = a.id GROUP BY userid , deviceid ) x ON x.userid = a.userid AND x.deviceid = u.deviceid AND x.max_usage_start_time = a.usage_start_time GROUP BY userid; 

Обратите внимание, что usage является зарезервированным словом. Поэтому это плохое имя для столбца (или таблицы). Также обратите внимание на несоответствия между вашим вопросом и вашей скрипкой.

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

 SELECT SUM(HIGH_COUNT), SUM(MEDIUM_COUNT) FROM `USAGE` INNER JOIN `APPS` ON USAGE.APPID=APPS.ID WHERE APPS.USERID=$input_user_id_to_lookup 

даст вам ваш счет.

Для yoru другого вопроса (домашнее задание?) Вы не дали нам полную схему, поэтому мы не можем догадаться, что вам нужно делать.

Также тот, кто проектировал этот db, должен был застрелить его ужасным