Используйте объединение / количество / группу по:
SELECT
employees.employeenumber, -- employee id
employees.lastname, -- sample employee name
COUNT(customers.customernumber) AS customer_count -- the number of customers
FROM employees
LEFT OUTER JOIN customers -- I'm using a left join so we can see people with 0 as well
-- get some shorter column names man
ON customers.salesrepemployeenumber = employees.employeenumber
GROUP BY employees.employeenumber
Короче говоря, вы выбираете всех сотрудников, затем объединяете их с результатами таблиц клиентов, а затем группируете их по идентификатору сотрудника. Используя COUNT
во время операции GROUP BY
, мы можем подсчитать количество различных записей в определенной группе.
Отсюда вопрос выбора наибольшего значения из результатов, что так же просто, как использовать LIMIT
/ ORDER BY
SELECT ...
ORDER BY customer_count DESC
LIMIT 1
Думаю, я боролся с этой проблемой почти неделю, прежде чем обнаружил проблему. Вот он, и я не шучу:
Указатель на это настраиваемое представление был определен в файле .m вместо файла .h, что сделало его переменной класса вместо переменной экземпляра.
И да, я мне очень-очень неловко.
setNeedsDisplay
будет вызывать drawRect:
, только если представление является видимым, в противном случае он делает недействительным слой представления и drawRect:
будет вызываться, он становится видимым.
При прокрутке табличного представления табличное представление будет запрашивать ячейки в надежде добавить их в представление. Если прокрутка выполняется достаточно быстро, подготовка некоторых ячеек займет слишком много времени, и к тому времени, когда они будут готовы, место, где они должны быть размещены, окажется за кадром. В этих случаях табличное представление отбрасывает их вместо добавления в представление прокрутки (и, таким образом, drawRect:
не будет вызываться)
Вы должны позвонить [_ table_ reloadData]
, чтобы перерисовать таблицу. Не [_ table_cell_ setNeedsDsiplay]
Похоже, есть два обстоятельства, при которых представление обновляется: если внутреннее значение изменяется (и вы вызываете [self setNeedsDisplay]
для принудительного обновления) и также, если tableview запрашивает отрисовку (или повторное использование) ячейки. В этой ситуации вы не перерисовываете это пользовательское представление явно.
Согласно документам:
Делегат табличного представления в tableView: cellForRowAtIndexPath: должен всегда сбрасывать все содержимое при повторном использовании ячейки.
Если tableview перерабатывает ячейки, оно вернет ячейку со старыми значениями, оставшимися на своих местах. Вы должны убедиться, что контент обновлен. В зависимости от того, как вы настроили пользовательскую ячейку таблицы,