Перейти к содержимому


Не корректно работает вычисление

вычисление

Сообщений в теме: 5

#1 WhiteRussian

    Участник

  • Пользователи
  • PipPip
  • 13 сообщений

Отправлено 17 Октябрь 2012 - 10:21

Добрый день!
Есть таблицы Товары (cb_data5), Отгрузки (одно из полей связи - id товара), Поставки (одно из полей связи - id товара).

Создаю вычисление в таблице "Поставки". Цель - вывод в заданное поле суммы отгруженного товара из данной поставки:


$sqlQuery = "SELECT sum(f76) as summa FROM cb_data8 AS a
INNER JOIN cb_data5 AS c ON a.f75=c.id
WHERE f292='".$line['ID']."' AND f75='".$line['Товары']."'";

Такой запрос не работает - выводит 0.
Если поправить элемент запроса AND f75='".$line['Товары']."' на AND f75='2' (т.е. подставить ID товара вручную - всё работает).
Такое ощущение, что $line['Товары'] передает в запрос какую-то фигню вместо ID (в самой базе данных в этом поле связи стоит именно ID). Как быть?

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 17 Октябрь 2012 - 10:37

Поля связи в переменной $line разворачиваются в массив. Если связь действительно есть, в этом массиве содержатся поля из связанной записи. Если нет, только элемент $line['Товары']['raw'], где лежит непосредственное значение из БД. Таким образом, в вашем случае можно использовать либо $line['Товары']['ID'], либо $line['Товары']['raw'], что в данном коде практически равнозначно.

#3 WhiteRussian

    Участник

  • Пользователи
  • PipPip
  • 13 сообщений

Отправлено 17 Октябрь 2012 - 11:24

['raw'] в моём случае не решает проблему - выводит 0.
Поясню: "Товары" - это поле связи в таблице "Поставки" (дословно это поле говорит "какой товар в этой поставке"). Т.е. я хочу вывести суммарное число отгруженного товара (лимит по товару в данной поставке, не работает) из поставки (лимит по ID, всё работает).
Пробовал указывать AND f75='".$line['Поставки']['Товары']."' и AND f75='".$line['Товары']."' и AND f75='".$line['Товары']['raw']."' - не работает. Работает только если прямо указать ID товара (AND f75='2').

#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 17 Октябрь 2012 - 11:35

Цитата

Работает только если прямо указать ID товара (AND f75='2').

Еще раз повторюсь: f75='2' и f75='".$line['Товары']['raw']."' - равнозначно, если в поле "Товары" у вас действительно содержится ссылка на строку с id=2. Если у вас выводится 0 - значит в товарах у вас именно 0, а никак не 2.

#5 WhiteRussian

    Участник

  • Пользователи
  • PipPip
  • 13 сообщений

Отправлено 17 Октябрь 2012 - 11:38

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

$res = mysql_query($sqlQuery);
$row = mysql_fetch_array($res);
$line['После всех заказов'] = $row['summa'];

Возможно, в моём случае этот код не корректен?

#6 WhiteRussian

    Участник

  • Пользователи
  • PipPip
  • 13 сообщений

Отправлено 17 Октябрь 2012 - 12:23

Починил. В моём случае всё заработало так:


SELECT sum(f76) as summa FROM cb_data8
INNER JOIN cb_data7 ON cb_data8.f73=cb_data7.id
WHERE f75='".$line['Товар']['raw']."' AND
f292='".$line['ID']."' AND
cb_data7.f67!='Отказ'





Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных