Помогите решить задачу без лишней нагрузки на MySQL: есть 2 таблицы. в 1-й содержится список кодов ТМЦ. В 2-й документы с количеством и кодами ТМЦ. Задача: Выбрать все коды тмц в второй таблице в соответствии с кодами тмц в первой таблице и сложить их значения с столбца `kol`. например: Берем в таблице1 первый код, ищем в таблице 2 все записи где table1['tmc'] = table2['tmc'] и складываем все их значения в переменную. Тоже самое с следующим кодом. Как этио сделать в режиме цикл в цикле я знаю, но тогда получается что запрос к БД тоже в цикле, что не есть хорошо и сильно увеличивает нагрузку на сервер. помогите грамотно решить задачу.
тяжело понять но это класический join - только я так и не понял что с чем складывать =) попробуй тут обрисуй =) может понятней будет http://sqlfiddle.com/
сумма? или посчитать сколько нашел? --- Добавлено --- Код (Text): select sum(хз что) table2 t2 join table1 t1 on t1.tmc = t2.tmc group by t1.tmc как-то так
Должна быть именно сумма. Кодом попробую представить чтобы понятнее было. Код (Text): $qw = mysql_query("SELECT tmc FROM sklad"); while($qw = mysql_query("SELECT tmc FROM sklad")){ $q = mysql_query("SELECT kol FROM skladfakt WHERE tmc='$qw[tmc]'"); $koll = 0; while($qq = mysql_fetch_array($q)){ $koll = $koll + $qq['kol']; } } Что-то типо того
Я ответил на поставленный выше вопрос. По поводу JOIN пробую но не могу сообразить правильный синтаксис
Чет ничего понять не могу. Код (Text): $mt = mysql_query("SELECT sum(kol) rashodfakt t2 JOIN 51840 t1 on t1.tmc = t2.tmc group by t1.tmc"); $s = mysql_fetch_array($mt); Ругается на строку $s = mysql_fetch_array($mt);
это крайне хуёвое название таблицы, друг. Возьми её в обратные кавычки тогда. --- Добавлено --- потому что надо проверять, что именно вернулось. может там вернулось ничего или ошибка.
Код (Text): $mt = mysql_query("SELECT sum(kol) `rashodfakt` t2 JOIN `51840` t1 on t1.tmc = t2.tmc group by t1.tmc"); $s = mysql_fetch_array($mt); Результат тот же Warning: mysql_fetch_array() expects parametr 1 to be resource. boolean given in bla bla bla on line 3
Куда куда? Я самоучка и много еще не знаю. --- Добавлено --- При проведении запроса через phpMyAdmin ругается на t2. Говорит мол Псевдоним был найден ранее. (near "t2" at position 27)
SELECT sum(kol) `rashodfakt` JOIN `51840` on `51840`.`tmc` = `rashodfakt`.`tmc` group by `51840`.`tmc`
Написал вот так: SELECT sum(kol) FROM `rashodfakt` JOIN `51840` on `51840`.`tmc` = `rashodfakt`.`tmc` group by `51840`.`tmc` Ошибка пропала. А как теперь вывести эту сумму? Доделал вот так : SELECT sum(`kol`) `sum` FROM `rashodfakt` JOIN `51840` on `51840`.`tmc` = `rashodfakt`.`tmc` group by `51840`.`tmc` И вывел через цикл: while ($s = mysql_fetch_array($mt)){ echo $s['sum']; } но некоторые значения получаются вида 69.9999999481188 Обработка через trim ни к чему не приводит.
Через round незя. Там есть и значения с плавающей точкой. Тут возник следующий вопрос. Возможно выбрать 1-м запросом: SELECT sum(`kol`)`rsum` FROM `rashodfakt` WHERE `51840`.`tmc` = `rashodfakt`.`tmc` и SELECT sum(`kol`)`psum` FROM `prihod` WHERE `51840`.`tmc` = `prihod`.tmc и SELECT sum(`kol`)`pfsum` FROM `prihodfakt` WHERE `51840`.`40` = `prihodfakt`.`tmc` Можно все это безобразие как нить в 1 запрос затолкать?
Надо вывести получается все строки из таблицы 51840, суммировать все kol в rashodfakt, prihod, prihodfakt WHERE 51840.tmc = tmc Потом вывести циклом: tmc -> rashodfakt.kol -> prihod.kol -> prihodfakt.kol <br>
UNION только я тя умоляю, переименуй таблицу, пока не поздно. Так, чтоб с буквы начиналась. И столбец. Вообще, названия дают по сущностям, а не номеру склада. Все склады должны жить в одной таблице. У них должно быть поле для принадлежности к конкретному складу.
Уже поздно. Слишком много на ней завязано. Чет я через JOIN сделал он мне не все позиции с 51840 выводит. Я так понимаю позиции которые в rashodfakt не найдены он не вывел. О ! Еще один новый оператор для меня. Этот с чем едят?