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

Запросы в БД, она же оптимизация


ArtemPitov

Recommended Posts

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

 

На выборку в отзывах есть такой запрос 

 

Это оп 1,5 в 2 он похож 

	public function getReviewsByProductId($product_id, $start = 0, $limit = 20) 
	{
		if ($start < 0) { $start = 0;  }	
		if ($limit < 1) { $limit = 20; }		
		
		$sql = "SELECT r.review_id, r.author, r.rating, r.text, p.product_id, pd.name, p.price, p.image, r.date_added 
					FROM " . DB_PREFIX . "review r 
						LEFT JOIN " . DB_PREFIX . "product p ON (r.product_id = p.product_id) 
						LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) 
						WHERE p.product_id = '" . (int)$product_id . "' 
							AND p.date_available <= NOW() 
							AND p.status = '1' 
							AND r.status = '1' 
							AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' 
						ORDER BY r.date_added DESC 
						LIMIT " . (int)$start . ", " . (int)$limit . "
				";
			
		return $this->db->query($sql)->rows;
	}

Так вот само не до умения, может я что то не улавливаю, мало ли, но зачем делать выборку с таблиц product и product_description если отзывы "дергаются" по $product_id и только в карточке товара 

 

 pd.language_id - из за мультиязыва, абсурд, разделять отзывы как то глупо 

 r.status = '1'  -  так же из разряда, а вдруг, а зачем тогда есть $product_id

 

Это лишние запросы, лишнее данные, лишнее время на обработку

 

Жду объективной критики и здравой дискуссии, спасибо

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

А с языком... ХЗ тоже вроде... а зачем..

 

 

AND p.status = '1'

И это бессмыслено

 

 

Ка раз это

AND r.status = '1'

 

Активный, промодерированный отзыв

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

Активный, промодерированный отзыв

да, я попутал с p

 

про язвы, как то уж очень абсурдно это сделано, грузить огромную таблицу что бы взять язык  :? 

для этого же есть в индексе $config->set('config_language_id', $languages[$code]['language_id']);

 

Сам метод наверное писался с расчетом допила под модуль или вроде этого, много лишнего как для отзывов в карточке товаров 

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

И вот тоже логика железная 

$start = 0, $limit = 20) 


if ($start < 0) { $start = 0;  }	
if ($limit < 1) { $limit = 20; }
Надіслати
Поділитися на інших сайтах

Ну все верно со start и limit

 

$start = 0, $limit = 20 - это дефолтные значения, если не переданы как параметр

 

if ($start < 0) { $start = 0; }    
if ($limit < 1) { $limit = 20; }

Это - валидация

чтобы не было отрицательных значений

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

Ну все верно со start и limit

 

$start = 0, $limit = 20 - это дефолтные значения, если не переданы как параметр

 

if ($start < 0) { $start = 0; }    

if ($limit < 1) { $limit = 20; }

Это - валидация

чтобы не было отрицательных значений

а как туда попадут отрицательные значения ? 

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

Это уже другой вопрос.

 

Но!!! Это правильный подход!!!

То что вы сейчас смотрите - это псевдоптимизация.

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

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

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

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

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

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

Вхід

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

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

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