Перейти к содержанию
ArtemPitov

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

Рекомендуемые сообщения

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

 

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

 

Это оп 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 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.