MYSQL: проблемы с использованием функций COUNT и SUM в многорядном выборе - PullRequest
1 голос
/ 26 марта 2012

Я пытаюсь создать процедуру, которая выбирает объявления из базы данных по очереди. И в конечном итоге возвращает выбранную строку объявлений и увеличивает значение просмотров.

Часть, над которой я сейчас работаю, должна

  1. Извлечение результатов из таблицы объявлений. ГДЕ "город" соответствует данному городу, а "место" соответствует названию данного места.
  2. Добавить дополнительный столбец 'num', в котором перечислены результирующие строки.
  3. Из этих результатов выберите строку, в которой столбец 'num' соответствует SUM ('views')% COUNT (id)

Это должно позволить мне показывать объявления по очереди, пока я увеличиваю столбец просмотров, когда объявление окончательно выбрано и возвращено

Код, над которым я сейчас работаю, это ....

SET @t1=-1;

SELECT * 
  FROM (SELECT @t1 := @t1+1 AS num, ads.* 
          FROM ads 
         WHERE city = 'Maitland' 
           AND spot = 'home-banner' 
      ORDER BY id ASC) dt 
 WHERE dt.num = SUM(dt.views) % COUNT(dt.id);

... Однако у меня проблемы с функциями SUM и COUNT. Я получаю неправильное использование ошибки групповой функции. Я также пытался переместить функции внутрь подзапроса, но по какой-то причине это приводит к тому, что подзапрос возвращает только один результат.

Результаты подзапроса

num id  spot    city    views
0   1   home-banner Maitland    0
1   2   home-banner Maitland    2
2   3   home-banner Maitland    0
3   4   home-banner Maitland    0
4   5   home-banner Maitland    0
5   6   home-banner Maitland    0

1 Ответ

1 голос
/ 26 марта 2012

Попробуйте это:

SELECT * FROM (
  SELECT @t1 := @t1 + 1 AS num, ads.*
  FROM ads, (SELECT @t1 := -1) init
  WHERE city = 'Maitland' AND spot = 'home-banner'
  ORDER BY id ASC
) dt
WHERE dt.num = (
  SELECT SUM(views) % COUNT(id) FROM ads
  WHERE city = 'Maitland' AND spot = 'home-banner')
...