Перейти к содержимому


Фото
- - - - -

Помогите с запросом Mysql


Best Answer Пастухов , 06.12.2017 - 13:08

Надо вместо
INNER JOIN __categories c
 что-то типа
LEFT JOIN __categories c ON c.id=pc.category_id
 
И, скорее всего, в другом месте запроса...
Перейти к посту


  • Чтобы отвечать, сперва войдите на форум
2 ответов в теме

#1 jonny008

jonny008
  • Пользователь
  • 88 сообщений

Опубликовано 06.12.2017 - 12:09

Здравствуйте. 

 

Есть необходимость выгрузить товары некоторых  категории в XML 

 

Для этого создал в таблице s_categories столбец efind

 

Далее  в Categories.php в запросе добавил c.efind

 

 

// Выбираем все категории
		$query = $this->db->placehold("SELECT c.id, c.parent_id, c.name, c.description, c.url, c.efind, c.meta_title, c.meta_keywords, c.meta_description, c.image, c.visible, c.position
										FROM __categories c ORDER BY c.parent_id, c.name");

Далее в шаблоне админки и в контроллерах. 

 

и в самом файле efind.php

 

// Товары
$simpla->db->query("SET SQL_BIG_SELECTS=1");
// Товары
$simpla->db->query("SELECT
 v.price,
 v.id as variant_id,
 p.name as product_name,
 v.name as variant_name,
 c.efind,
 v.position as variant_position,
 p.id as product_id,
 p.url,
 p.annotation,
 pc.category_id
 , i.filename as image
 
					FROM __variants v INNER JOIN __categories c
					
					LEFT JOIN __products p ON v.product_id=p.id
                    LEFT JOIN __products_categories pc ON p.id = pc.product_id AND pc.position=(SELECT MIN(position) FROM __products_categories WHERE product_id=p.id LIMIT 1)	
					LEFT JOIN __images i ON p.id = i.product_id AND i.position=(SELECT MIN(position) FROM __images WHERE product_id=p.id LIMIT 1)
					
					WHERE p.visible AND c.efind >0 AND (v.stock >0 OR v.stock is NULL) GROUP BY v.id ORDER BY p.id, v.position ");

 

Всё на подобии выгрузки в ЯМ. 

 

По такому запросы выводятся все товары. Я в запросах полный ноль. 

 

 



#2 Пастухов

Пастухов
  • Пользователь
  • 61 сообщений
  • Программирование
  • Откуда:Минск

Опубликовано 06.12.2017 - 13:08   Best Answer

Надо вместо
INNER JOIN __categories c
 что-то типа
LEFT JOIN __categories c ON c.id=pc.category_id
 
И, скорее всего, в другом месте запроса...


#3 jonny008

jonny008
  • Пользователь
  • 88 сообщений

Опубликовано 06.12.2017 - 13:27

Надо вместо
INNER JOIN __categories c
 что-то типа
LEFT JOIN __categories c ON c.id=pc.category_id
 
И, скорее всего, в другом месте запроса...

Спасибо большое. Заработало так: 

 

// Товары
$simpla->db->query("SET SQL_BIG_SELECTS=1");
// Товары
$simpla->db->query("SELECT
 v.price,
 v.id as variant_id,
 p.name as product_name,
 v.name as variant_name,
 c.efind,
 v.position as variant_position,
 p.id as product_id,
 p.url,
 p.annotation,
 pc.category_id
 , i.filename as image
 
					FROM __variants v 
					
					
					LEFT JOIN __products p ON v.product_id=p.id
                    LEFT JOIN __products_categories pc ON p.id = pc.product_id AND pc.position=(SELECT MIN(position) FROM __products_categories WHERE product_id=p.id LIMIT 1)	
					LEFT JOIN __images i ON p.id = i.product_id AND i.position=(SELECT MIN(position) FROM __images WHERE product_id=p.id LIMIT 1)
					LEFT JOIN __categories c ON c.id=pc.category_id
					WHERE p.visible AND c.efind >0 AND (v.stock >0 OR v.stock is NULL) GROUP BY v.id ORDER BY p.id, v.position ");





0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых