2016-06-29 3 views
0

Здравствуйте, я пытаюсь сделать выбор Выберите, где использование выбирает отдел и хочет иметь раздел WHERE этот отдел, скажем, мы выбираем 10 результатов из отдела: Налоги, а затем создаем SUMSELECT платы WHERE status = 1. Какие результаты будут выбраны на основе первого выбора. Все результаты поступают из одной таблицы.MySQL Выберите второй подсчет предварительно выбранных результатов

| id | department | status | fee | 
---------------------------------- 
| 1 | tax  | 1 | 20 | 
| 2 | tax  | 2 | 20 | 
| 3 | tax  | 1 | 20 | 
| 4 | accounting | 1 | 20 | 

Так что я хотел бы выбрать, если отдел выбрать в качестве налога, и статус 1 сумма СТАВКА столбцов, которые должны быть 40

Пока мой Выберите запрос выглядит следующим образом:

SELECT P.id, P.fee, (SELECT SUM(P.fee) FROM cases P WHERE status = 1) as fee_USD 
FROM cases P WHERE 1"; 
if (!empty($department)) { $sql .= " AND P.department = '$department'"; } 

Последняя строка проверяет, предоставлен ли отдел в качестве опции выбора. есть и другие варианты, но, чтобы сделать это простым, я вставил только эту часть. Любая помощь приветствуется.

В Fee Выбора тока = 80

ответ

0

Вы должны добавить корреляции к вашему запросу:

SELECT P1.id, P1.fee, 
     (SELECT SUM(P2.fee) 
     FROM cases P2 
     WHERE P2.department = P1.department AND status = 1) as fee_USD 
FROM cases P1 
WHERE 1 ... 

Таким образом, подзапрос возвращает SUM только те записи, которые связаны с текущая запись основного запроса.

+0

Это идеальное решение. Один вопрос: есть ли способ проверить предложение WHERE, если данный $ department не имеет значения null, если это null, чтобы удалить это условие: P2.department = P1.department –

+0

@JohnSiniger Да , обычно мы делаем что-то вроде '$ department IS NULL OR department = $ department'. –