powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос
6 сообщений из 6, страница 1 из 1
Помогите составить запрос
    #39159519
prut.n.v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую всех!
Есть категория телевизоры.
Так вот каждый товар имеет свои характеристики.
Характеристики в базе идут отдельным полем
product_id | attribute_id | text
12 | 12 | 42
13 | 12 | 32
12 | 14 | usb
...

Мне нужно составить такой запрос что бы он выбирал похожие товары по атрибутам, то есть если телевизор имеет 42 дюйма, usb входы и мощность динамиков 15 Вт то запрос выбирал такие товары которые имею атрибуты 40-44 дюйма, usb и динамики от 10 до 20 к примеру.
Можно ли это сделать запросом в базу или надо смотреть в сторону выборки всех товаров и уже фильтрацию средствами php?
Благодарю за любые подсказки.
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39159528
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну почему нельзя...
вы же можете по таблице атрибутов выбрать необходимые product_id (WHERE ... OR ... OR)
наличие трех одновременно свойств найдете так
COUNT(attribute_id) .... GROUP BY product_id HAVING COUNT(attribute_id) >=3
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39159534
prut.n.v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот мой код запроса:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
		$sql = "SELECT * FROM " . DB_PREFIX . "product_to_category p2c 
			LEFT JOIN " . DB_PREFIX . "product p ON (p2c.product_id = p.product_id) 
			LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) 
			LEFT JOIN " . DB_PREFIX . "product_attribute pa ON (p.product_id = pa.product_id) 
			WHERE p2c.category_id IN (SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "'" . $main_category . ")
			AND p.status = '1' 
			AND p.product_id = '" . $product_id . "' 
			AND p.date_available <= NOW() 
			AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' 
			AND p.product_id != '" . (int)$product_id . "' 			
			AND p.quantity > '0'";			
			if($data['ar_price']){
				$sql .= "AND p.price >= ((SELECT price FROM " . DB_PREFIX . "product WHERE product_id = '" . (int)$product_id . "')*0." . $data['min_price'] . ") AND p.price <= ((SELECT price FROM " . DB_PREFIX . "product WHERE product_id = '" . (int)$product_id . "')*1." . $data['max_price'] . ") ";
			}
			if($data['ar_manufacturer']){
				$sql .= "AND p.manufacturer_id = (SELECT manufacturer_id FROM " . DB_PREFIX . "product WHERE product_id = '" . (int)$product_id . "')";
			}
			if($data['ar_attribute'] && $attribute_values){
			  foreach($attribute_values as $attribute_id => $value) {
				$sql .= " AND (TRIM(LOWER(pa.text)) = '" . $value . "' AND pa.attribute_id = '" . $attribute_id . "' AND pa.language_id = '" . $this->config->get('config_language_id') . "')";
			  }			
			}
Не подскажите более подробно как сделать?
Ваш код получается берет товары у которых присутствуют одинаковые атрибуты более 3 как я понял?
А хотелось что бы брались значения атрибутов и делалась выборка товаров которые имеют такие же атрибуты и похожие значения
Но опять же вопрос, если не будет одного из атрибутов то товары не выберет?

В общем конечная цель сделать похожие товары. Думаю как лучше сделать одним запросом что бы быстрее работало.
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39159745
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prut.n.vНо опять же вопрос, если не будет одного из атрибутов то товары не выберет?это вы у нас спрашиваете? или просто мысли вслух?
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39159786
Фотография Alex_Ustinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
prut.n.v,

не хочется "распарсивать" ваш запрос в чистый SQL.
Отвечу также схематично -
---- и похожие значения
Код: sql
1.
2.
3.
4.
/* где то в этой части */
" AND (TRIM(LOWER(pa.text)) = " . $value 
/*ищите значение "по модулю", т.е. */
ABS(ЧИСЛО(pa.text)-. $value) <  3  /*, где 3 - значение "расброса" значения атрибута*/ 

ABS() - модуль числа
...
Рейтинг: 0 / 0
Помогите составить запрос
    #39159945
prut.n.v
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Супер, спасибо!!! Буду кумекать))
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]