Унаследованный класс C ++ имеет одноименный член

SELECT 
   DAYOFYEAR(O.`date`)  AS d, 
   COUNT(*),
   (select count(*) from `orders` 
       where  DAYOFYEAR(`date`) <= d and   `hasPaid` > 0)
FROM  
  `orders` as O
WHERE  
  O.`hasPaid` > 0
GROUP  BY d
ORDER  BY d

Это потребует некоторой синтаксической настройки (у меня нет MySQL для ее проверки), но она показывает вам эту идею. Подзапрос просто должен вернуться и добавить все свежее, что вы уже включили во внешний запрос, и это нужно сделать для каждой строки.

Посмотрите на этот вопрос , как использовать соединения для достижения того же.

Чтобы решить проблемы ухудшения производительности с ростом данных: поскольку существуют Максимум. 366 дней в году, и я предполагаю, что вы не выполняете этот запрос в течение нескольких лет, подзапрос будет оцениваться до 366 раз. С правильными индексами в дате и флагом hasPaid вы будете в порядке.

14
задан Tonechas 5 February 2017 в 21:59
поделиться

6 ответов

В этом случае вы должны полностью указать имя участника.

class A
{
public:
  int x;
};


class B : public A
{
public:
  int x;
  B() 
  { 
    x = 0;
    A::x = 1;
  }
};
29
ответ дан 1 December 2019 в 00:10
поделиться

Один из подходов (уже упомянутых во всех других ответах) - использовать квалифицированное имя члена, например Base :: member . Его можно использовать вместе с явным доступом через указатель this , если это ваш стиль: this-> Base :: member .

Другой подход - выполнить доступ через этот указатель, явно преобразованный в тип базового класса: ((Base *) this) -> member .

Конечно, приведенные выше ссылки на этот указатель сделаны в предположении, что вы пытаетесь получить доступ к члену из некой нестатической функции-члена класса. Чтобы получить доступ «извне», те же уловки можно применить к любому другому указателю (или ссылке): some_pointer-> Base :: member или ((Base *) some_pointer) -> member .

Для членов данных эти два подхода эквивалентны. Для функций-членов они могут приводить к разным результатам с виртуальными функциями. По этой причине, как правило, следует предпочесть первый подход.

4
ответ дан 1 December 2019 в 00:10
поделиться

Чтобы получить доступ к скрытому члену в базовом классе, вы должны поставить перед именем члена имя базового класса. См. Ниже:

class A
{
protected:
   int i;
};

class B : public A
{
public:
   void foo( void )
   {
      int a_i = A::i;
      int b_i = i;
      int b_i_as_well = B::i;
   }
private:
   int i;
};
6
ответ дан 1 December 2019 в 00:10
поделиться

Да.

Уточните свой вызов, f () , с именем класса: SpecificClass :: f () .

4
ответ дан 1 December 2019 в 00:10
поделиться

Префиксом classname::

3
ответ дан 1 December 2019 в 00:10
поделиться

Если вы укажете имя, то автоматически получите доступ к тому, что находится в наследуемом классе. Если вы имеете в виду, как получить доступ к тому, который находится в базовом классе, используйте Base::member

8
ответ дан 1 December 2019 в 00:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: