|
|
|
| Есть функция (урезал ее для быстрого поняттия ;) )
function cena_tovara($skolko,$bitka) {
$sql_price = mysql_query("SELECT `znak`,`cena`,`color` FROM price WHERE `hide` = '0' ORDER BY `name` DESC");
while ($row_price = mysql_fetch_array($sql_price)) {
if ($row_price['cena'] != '1')
{
$cena=$skolko*$row_price['cena'];
$cena=number_format($cena,0,".","");
echo "<font color='#$row_price[color]'>$cena $row_price[znak]</font>$bitka";
}else {
echo "<font color='#$row_price[color]'>$skolko $row_price[znak]</font>";
}
}
}
|
Она берет курсы валют и выводит на экран примерно такое:
539 $
4339 грн
4468 грн (межгород)
4522 грн (безнал)
555 WMZ
|
Что не устраивает - это запросы к БД т.е. при отображении раздела в котором выводится по 20 товаров эта функция делает 20 запросов, что б пересчитать валюты.
Как можно оптимизировать под 1 запрос?
Большое спасибо! | |
|
|
|
|
|
|
|
для: virtus1k
(26.07.2009 в 18:59)
| | Записать полученные курсы из базы в переменные, например, в сессию, и проверять, если они там есть, запроса более не делать. | |
|
|
|
|
|
|
|
для: sim5
(26.07.2009 в 19:17)
| | Я это понимаю :) но реализовать не допетраю как. Если есть пару минут, черкни мелкий привет. СПС | |
|
|
|
|
|
|
|
для: virtus1k
(26.07.2009 в 19:33)
| | Я не вижу в вашем запросе имен полей, которые хотя бы отдаленно намекали на курсы валют, я там вижу цену продукта и т.п.. Поэтому бог его знает, в чем и где они у вас там находятся, но.... Курсы валют вообще нужно держать не в таблице продуктов, а отдельной таблице, хранящей курсы валют и другую подобную информацию. При первом входе клиента проверяете сессию на наличие курсов валют в ней, например:
<?
//если в сессии нет курсов валют
if (!isset($_SESSION['currency'])) {
//создаем таковые
$_SESSION['currency'] = array();
//делаем запрос в базу за текущими курсами (к таблице в которой они лежат!, а не в товарах)
//и заполняем ими сессионный массив
$_SESSION['currency']['usd'] = $row['usd'];
$_SESSION['currency']['grn'] = $row['grn'];
//.......
//где $row['field_name'], поля курсов валют из базы
//можно применить и array_push()
array_push($_SESSION['currency'], $row);
}
//теперь на всех страницах можно получать курсы валют из сессии
$_SESSION['currency']['usd'] //доллары
$_SESSION['currency']['grn'] //гривны
//и т.д..
|
| |
|
|
|
|
|
|
|
для: sim5
(26.07.2009 в 19:50)
| | :)
Неверно поняли...
function cena_tovara($skolko,$bitka) {
$sql_price = mysql_query("SELECT `znak`,`cena`,`color` FROM price WHERE `hide` = '0' ORDER BY `name` DESC");
.......
$skolko ЭТО цена товара
$sql_price - это обращение именно к таблице, которая содержить 5-6 записей про курсы валют :)
|
Спасибо большое, хоть так кода больше, но запросы сократил. Большое спасибо! | |
|
|
|
|
|
|
|
для: virtus1k
(26.07.2009 в 19:55)
| | Глупо держать курсы валют в таблице где указана цена товара! Цена товара должна быть указана в таблице товаров, а курсы валют обновляются раз в сутки! Вы что переписываете потом эту таблицу при смене курсов?
Если даже речь о выводе только здесь, то и в этом случае должен быть запрос к таблице товаров, и в нем же обращение к таблице курсов валют - один запрос к двум таблицам сразу. | |
|
|
|