сумму по столбцам в PHP5

diez

Новичок
сумму по столбцам в PHP5

Как получить сумму по столбцам в PHP5 по средствам odbc драйвера?

Задача получить сумарное значение по числовому полю. Средствами SQL на сколько я знаю это делается так:
SELECT SUM(price) FROM products;
Попытался получить занчение запроса в PHP:
PHP:
<?php
$connect=@odbc_connect("my_ODBC","root","pass");
$prod_sum=odbc_exec($connect,"SELECT SUM(price) FROM products" );

echo "</table>"
while ($sum=odbc_fetch_array($prod_sum))
{
		
	echo 	"<tr>
		
			<td>".$tab['price']."</td>
			
		</tr>";
}
echo "</table>";

?>
Ничего не выводится!

Если просто написать echo $prod_sum; то выводится надпись Resource id #4. Что это такое,
как с этим бороться и как вообще можно осуществить задуманное?

Заранее всем спасибо!!!
 

Фанат

oncle terrible
Команда форума
aleks_raiden
ты крут не по годам.
а почему так происходит - ни ты, ни автор вопроса как не имели ни малейшего представления - так и овстанетесь в полнейшем неведении.
знакомый шаман заклинание подсказал, да?
 

diez

Новичок
Автор оригинала: *****
aleks_raiden
ты крут не по годам.
а почему так происходит - ни ты, ни автор вопроса как не имели ни малейшего представления - так и овстанетесь в полнейшем неведении.
знакомый шаман заклинание подсказал, да?
Я конечно я понимаю, что пальцы гнуть не запретишь, но признак ПО НАСТОЯЩЕМУ знающего человека- ответ на поставленный вопрос, или хотя бы попытка это сделать!!!
 

Фанат

oncle terrible
Команда форума
diez
Я, конечно, понимаю, что учить других на форуме, что и как им отвечать - гораздо интереснее, чем решать свои собственные проблемы.
Но, может быть, ты ответишь на вопрос, который я тебе задал?
 

diez

Новичок
Знакомые шаманы не подсказавали, а echo $prod_sum не работает, тк это просто идентификатор результата возращенного функцией odbc_exec!!!

Теперь ответ за тобой!
 

Фанат

oncle terrible
Команда форума
правильно.
$prod_sum - это только идентификатор результата.
а сам результат в какой переменной?
 

aleks_raiden

Новичок
Может так?

1. $connect=@odbc_connect("my_ODBC","root","pass");

В данной строке в переменной $connect имеется конект к базе, далее применяя эту переменную можно с помощью других функций работать с базой. Это просто ссылка на ресурс - подключение к базе.

2. $prod_sum=odbc_exec($connect,"SELECT SUM(price) FROM products" );

тут мы при помощи функции выполнения SQL команды получаем выборку с базы. Но! в переменной совсем не просто данные из результата (ибо откуда универсальная функция odbc_exec знает как представить любой результат любого запроса?). Там всего лишь идентификатор набора данных, возвращаемого функцией. ТО есть тоже ресурса. Что и выводит вам дамп (Resource id #4)

3. Чтобы именно получить доступ к самим данным необходимо использовать этот идентификатор полученных данных и применить к ним функцию перебора, так как ответ выдается в виде таблицы (ну примерное описание, да, может не точное).
Что мы и делаем - while ($sum=odbc_fetch_array($prod_sum))

Эта функция будет получать из нашего результующего набора данных, полученого от базы, построчно каждую запись и выдавать уже в виде ассоциативного или обычного массива в переменную $sum или FALSE если больше нет результата. И только теперь в нашей переменной $sum находится обычные данные - массив текущей строки ответа (ведь запрос может как одно значение возвращать, так и много).

*****, смею заверить я знаю что и почему происходит, но в данном случае сначала просто ответил на вопрос. Да, может углубленная лекция будет лучше, хотя на эту тему написано много и на этом сайте и в мане и в других местах.
 

Фанат

oncle terrible
Команда форума
выдавать уже в виде ассоциативного или обычного массива в переменную $sum
про это можно поподробнее?
код odbc_fetch_array($prod_sum) возвращает ассоциативный массив или обычный?
 

aleks_raiden

Новичок
асоциативный... odbc_fetch_array -- Fetch a result row as an associative array (цитата с мануала)

Я не претендую на точность - не пользовался никогда ODBC, так что это общие черты работы.. идеология так сказать. думаю автор топика сможет всетаки взять мануал и прочитать точнее.
 

Фанат

oncle terrible
Команда форума
к odbc это все не имеет никакого отношения.
все (насколько мне известно) функции *_fetch_* работают в пыхе единообразно.
какое отношение к ассоциативным массивам имеет твой ответ $sum[0]?
 

aleks_raiden

Новичок
он имеет то отношение, что:
1. - в како переменной искать результат.
2. примерно в каком виде его следует ожидать.

да, я ошибся в типе массива, но нормальный человек сразу это проверит и такой ответ будет для него все же ответом на вопрос + некие знания (надеюсь).

Кроме того, например, mysql_fetch_array может возвращать оба типа массива сразу ): так что такой ответ может быть верным.
 

Фанат

oncle terrible
Команда форума
он имеет то отношение, что:
1. - в како переменной искать результат.
очень интересно
логика на грани фантастики.
то есть, если я напишу
очень интересно
логика на грани фантастики.

то есть, если я напишу
$sum=odbc_fetch_array($prod_sum))
то результат искать в переменной $sum
а если напишу
$sum=mysql_fetch_array($prod_sum))
то уже не в $ sum,а в какой-то другой???
то есть, в какой переменной искат ьрезультат - оказывается зависит не о того, какую переменную я сам написал, а от того, какую функциюприменяю? Ну ты силен фантазировать...
Кроме того, например, mysql_fetch_array может
я тебя не спрашивал, что mysql_fetch_array может.
я тебя спросил, какой массив возвратит КОНКРЕТНЫЙ код odbc_fetch_array($prod_sum)

ты бы хоть раз за время ведения дискуссии в доку сходил бы почитал, а?
 

aleks_raiden

Новичок
Может не будем накалять страсть?
Я читал доку и не раз и не только сегодня.

Это был ответ на Вашу фразу "все (насколько мне известно) функции *_fetch_* работают в пыхе единообразно." - оказалось нет не все единобразно.

В данном случае автор топика в примере пробовал получить не в той переменной результат. Конечно, более верно было бы сразу показать что трабла не в переменнолй а в логике работы. Но я, видимо, придерживаюсь немного других взглядов на стиль и содержания ответа. Если данный вопрос, вынесенный в топке, решен, может прекратим дисскусию, которая все дальше удалилась от темы и не нисет ничего полезного?
 
Сверху