| Цитата(Zloxa @ 29.5.2012, 23:56) | | Код | select * from ( SELECT c.*, co.title as cotitle, ( SELECT SUM( `amount` ) as amount FROM payment WHERE `type_payment` = 1 AND ( ( `type_document` = 3 AND `id_document` = c.ID ) OR ( `type_document` = 1 AND `id_document` IN( SELECT id FROM invoice WHERE `id_contract` = c.ID ) ) ) ) as amount2, ( SELECT SUM( qt * price ) as amount FROM invoice_composition WHERE `id_invoice` IN( SELECT id FROM invoice WHERE `id_contract` = c.ID ) ) as exposed2 FROM contract as c LEFT JOIN contractor as co ON(co.ID = c.id_contractor) ) s WHERE amount2 >= exposed2 ORDER BY amount2
|
|
Спасибо! Действительно сработало. Очень благодарен, теперь буду знать, как делается выборка после выборки)))
Добавлено через 1 минуту и 52 секунды
| Цитата(tishaishii @ 30.5.2012, 07:24) | ...и избавиться от кучи вложенных запросов. Не знаю имеющуюся структуру БД. Как правило, максимально приходится использовать только один уровень вложенности, какая бы сложная БД или данные, которые требуется получить, ни были - разбиваю по запросам. |
Общение идет MySQL->PHP, и такой сложный запрос позволяет избежать множества циклов в PHP. К тому же запрос, единожды отправленный в MySQL из PHP выполнится быстрее, нежели много небольших запросов. К тому же запрос кешируется, и выполняться будет только при необходимости) |