Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Помогите переделать функцию
 
 автор: virtus1k   (26.07.2009 в 18:59)   письмо автору
 
 

Есть функция (урезал ее для быстрого поняттия ;) )

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 запрос?
Большое спасибо!

  Ответить  
 
 автор: sim5   (26.07.2009 в 19:17)   письмо автору
 
   для: virtus1k   (26.07.2009 в 18:59)
 

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

  Ответить  
 
 автор: virtus1k   (26.07.2009 в 19:33)   письмо автору
 
   для: sim5   (26.07.2009 в 19:17)
 

Я это понимаю :) но реализовать не допетраю как. Если есть пару минут, черкни мелкий привет. СПС

  Ответить  
 
 автор: sim5   (26.07.2009 в 19:50)   письмо автору
 
   для: 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'//гривны
//и т.д..

  Ответить  
 
 автор: virtus1k   (26.07.2009 в 19:55)   письмо автору
 
   для: 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 записей про курсы валют :)


Спасибо большое, хоть так кода больше, но запросы сократил. Большое спасибо!

  Ответить  
 
 автор: sim5   (26.07.2009 в 20:31)   письмо автору
 
   для: virtus1k   (26.07.2009 в 19:55)
 

Глупо держать курсы валют в таблице где указана цена товара! Цена товара должна быть указана в таблице товаров, а курсы валют обновляются раз в сутки! Вы что переписываете потом эту таблицу при смене курсов?
Если даже речь о выводе только здесь, то и в этом случае должен быть запрос к таблице товаров, и в нем же обращение к таблице курсов валют - один запрос к двум таблицам сразу.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования