2013-12-15 6 views
0

У меня есть 3 таблицы: DefMatiere, в котором хранятся имена элементов и ингредиент таблицы, который содержит используемые кванты и StockData, который содержит купленные количества и их значения.Как получить сумму в трех таблицах

Я написал этот запрос для получения названий предметов и количества, используемых и купленных, и суммы, уплаченные.

SELECT dm.nom, SUM(IF(dm.id=ig.matid, ig.qty, 0)) AS used, 
SUM(DISTINCT IF(dm.id=sd.matid ,sd.quantite,0)) AS achete, 
SUM(DISTINCT IF(dm.id=sd.matid ,sd.montant*(1+(sd.tvaval/100)) ,0)) AS val, 
(SUM(DISTINCT IF(dm.id=sd.matid ,sd.quantite,0))- SUM(IF(dm.id=ig.matid, ig.qty, 0))) AS restant 
FROM DefMatiere AS dm 
LEFT JOIN ingredient AS ig ON ig.matid=dm.id 
LEFT JOIN StockData AS sd on sd.matid = dm.id 
WHERE dm.type = 1 GROUP BY dm.nom 

Это дает то, что я хочу, но, похоже, это очень длинный раздражающий роман.

Можно ли использовать псевдонимы для создания этих расчетов LIKE achète - Валу AS restant

Потому что я хочу, чтобы добавить слишком VAL/achète * используется вал/achète * restant в этом случае мой запрос становится, как Господь из томов RINGS 6.

Или я должен продолжить писать свой роман? Любая помощь будет учить меня

[EDIT]

Однако после ввода еще несколько ДАННЫЕ Я видел этот запрос не является правильным.

Потому что если в StockData имеется более одной строки с таким же матом, результат, который я получаю для использования, удваивается или утроится в зависимости от количества строк.

HERE результаты запроса и решения я нашел

И HERE как я решил. Но я не мог найти подходящий запрос.

+1

Вы хотите, чтобы псевдонимы были переменными, что невозможно. – Mihai

+0

Возможно, что-то вроде: SELECT @ used = SUM (IF (dm.id = ig.matid, ig.qty, 0)) FROM table – Mihai

+0

Пока это выполняется быстро, это единственное, что нужно беспокоиться о – Strawberry

ответ

0

Ваша проблема относительно проста Я думаю, но не так просто, что я хочу сидеть и писать SQL для вас.

Но так как вы просили научить, что я думаю, что это хорошо, вот что я думаю, поможет вам больше всего в долгосрочной перспективе:

Я думаю, что лучший способ писать SQL (и научиться write SQL) не с нуля, а с помощью более мощного графического инструмента SQL с помощью мастера. Я использую Microsoft Access 2003, но есть много других инструментов SQL. На таком инструменте вы можете легко настроить свои модели, связать и запросить и подвести итог своему сердцу.

Когда я создаю сложные запросы в php, я часто сначала моделирую запросы в графическом пользовательском интерфейсе SQL, а затем, когда у меня есть итоговые значения, как я их хочу, я сохраняю полученный SQL и подключаю его к php.

+0

. Моя цель, когда я отправляю этот вопрос, заключается не в том, что кто-то пишет SQL для меня, но показывает путь, как сделал Михай Я попробовал, что он посоветовал, что он не работает.Я уже написал свой роман, он работает. Моя цель в том, что есть способ сократить мой роман. Это все. –

Смежные вопросы