Hallo,
ich weiß nicht ob das die richtige Kategorie ist, irgendwie passt es in alle teilweise.
Folgendes, wir suchen eine Möglichkeit, uns alle Artikel deren eine Eigenschaft bzw. ein Filtermerkmal zugeordnet wurde auszugeben, damit wir vergleichen können, ob bei allen auch das richtige Merkmal gesetzt wurde.
Ich dachte also, es wäre mit einem einfachen SQL Query zu lösen… dem ist aber leider nicht so, da dieses über 4 Tabellen geht, komme ich etwas durcheinander - ACHTUNG: Das ist nicht meine Stärke…
Aktuell sieht das ganze so aus:
“SELECT
(SELECT ordernumber FROM s_articles_details WHERE s_filter_articles.articleID = s_articles_details.articleID LIMIT 1) as Artikelnr,
(SELECT name FROM s_articles WHERE s_filter_articles.articleID = s_articles.id LIMIT 1) as Name,
(SELECT f.name FROM s_filter_options f join s_filter_values v on f.id = v.optionID LIMIT 1) as Kategorie,
(SELECT value FROM s_filter_values WHERE s_filter_articles.valueID = s_filter_values.id LIMIT 1) as Eigenschaft
FROM s_filter_articles
WHERE 1”
Damit erhalte ich alle Artikel, denen eine Eigenschaft zugewiesen wurde und dessen Wert… nur leider nicht die richtige Kategorie - das ist mit sicherheit sowieso schon eine komplizierte Methode, hat jemand einen einfacheren Weg oder kann mir jemand sagen, wie ich die richtige Kategorie mit ausgeben kann?
Vielen Dank im voraus!
Hi,
kannst du dafür nicht einfach den ListProduct-Service nutzen? Oder fehlen da Informationen?
/** @var ContextServiceInterface $contextService */
$contextService = $container->get('shopware_storefront.context_service_core');
$context = $contextService->getProductContext();
/** @var ListProductService $productListService */
$productListService = $this->get('shopware_storefront.list_product_service');
/** @var ListProduct $product */
$product = $productListService->get('sw-555', $context);
/** @var ListProduct[] $products */
$products = $productListService->getList(['sw-555', 'sw-111'], $context);
Wenn du es zwingend via SQL machen möchtest, solltest du INNER JOINS verwenden statt Subselects. Oder du nutzt die sGetPromotionById-Methode in der sArticles. Die hat auf jeden Fall auch Eigenschaften und Kategorien, ist aber imperformant, wenn du das für viele Produkte nacheinander machst.
Besten Gruß,
Daniel
Hallo,
Danke für die Antwort. Ziel ist am Ende eine Excel Tabelle mit allen Artikel, denen eine Filter-Eigenschaft zugewiesen wurde.
Ich dachte am schnellsten würde das via SQL gehen.
Das Problem ist vor allem Zeile 4:
(SELECT f.name FROM s_filter_options f join s_filter_values v on f.id = v.optionID LIMIT 1) as Kategorie,
Er zieht mir aus allen Ergebnissen immer den zweiten Wert aus der „filter_options“ als Eigenschaften-Name, was ich mir als „Kategorie“ ausgebe.