Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Запрос к базе Mysql


stebgo

Recommended Posts

Здравствуйте, помогите пожалуйста написать правильный запрос к базе данных.

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

по этому создал таблицу в базе с нужными мне тарифами, но не могу написать правильный запрос к бд.

 

вот что у меня есть 

код модуля

<?php 
class ModelShippingWeight extends Model {    
  	public function getQuote($address) {
		$this->load->language('shipping/weight');
		
		$quote_data = array();
	$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "geo_zone ORDER BY name");
	
		foreach ($query->rows as $result) {
			if ($this->config->get('weight_' . $result['geo_zone_id'] . '_status')) {
				$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "zone_to_geo_zone WHERE geo_zone_id = '" . (int)$result['geo_zone_id'] . "' AND country_id = '" . (int)$address['country_id'] . "' AND (zone_id = '" . (int)$address['zone_id'] . "' OR zone_id = '0')");
			
				if ($query->num_rows) {
					$status = true;
				} else {
					$status = false;
				}
			} else {
				$status = false;
			}
		
			if ($status) {
				$cost = '';
				$weight = $this->cart->getWeight();
				$cart_total = $this->cart->getTotal();
				$rates = explode(',', $this->config->get('weight_' . $result['geo_zone_id'] . '_rate'));
				
				foreach ($rates as $rate) {
					$data = explode(':', $rate);
				
					if ($data[0] >= $weight) {
						if (isset($data[1])) {
							//$cost = $data[1];
							$cost =$data[1] -($cart_total-$weight/1000*14)*0.2;
							//$cost=$address['country_id'];
							if($cost<0){$cost=0;}
						}
				
						break;
					}
				}
				
				if ((string)$cost != '') { 
					$quote_data['weight_' . $result['geo_zone_id']] = array(
						'code'         => 'weight.weight_' . $result['geo_zone_id'],
						'title'        => $result['name'] . '  (' . $this->language->get('text_weight') . ' ' . $this->weight->format($weight, $this->config->get('config_weight_class_id')) . ')',
						'cost'         => $cost,
						'tax_class_id' => $this->config->get('weight_tax_class_id'),
						'text'         => $this->currency->format($this->tax->calculate($cost, $this->config->get('weight_tax_class_id'), $this->config->get('config_tax')))
					);	
				}
			}
		}
		
		$method_data = array();
	
		if ($quote_data) {
      		$method_data = array(
        		'code'       => 'weight',
        		'title'      => $this->language->get('text_title'),
        		'quote'      => $quote_data,
				'sort_order' => $this->config->get('weight_sort_order'),
        		'error'      => false
      		);
		}
	
		return $method_data;
  	}
}
?>

 

 

в строке 34 расчет стоимости доставки, в последствии $data[1] я заменю на стоимость полученную на основе данных из бд.

 

данные нужно получить из таблицы бд "country22" на основании A - id страны (получаю $address['country_id'] ;)  столбцы C,D,E (тарифы)

хотелось бы получить в виде массива Z[1]; Z[2]; Z[3];

 

или ткните меня в раздел форума где описан принцип формирования запроса к бд в опенкарт, гугл и поиск по форуму что то не помогли.

Надіслати
Поділитися на інших сайтах


О боги!

"принцип формирования запроса к бд в опенкарт"(с) ни чем не отличается от формирования запросов в mysql. Это вообще одно и тоже.

p.s. для того чтобы мы смогли найти вашу строку 34 нужно было в поле код указывать номер первой строки, с которой кусок кода начинается

 

пример:

if ((string)$cost != '') { 

 

Надіслати
Поділитися на інших сайтах

я понимаю что можно сделать как обычный запрос mysql

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

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

Надіслати
Поділитися на інших сайтах


я понимаю что можно сделать как обычный запрос mysql

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

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

Все проблема решена, оказалось что при импорте в базу значений тарифы сохранились в varchar с пробелом, перезалил в int и заработало всеми способами которыми я пытался получить значения

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.