Ist das dann so richtig:
Query zur Überprüfung, ob jedem Master Produkt eine Kategorie zugeordnet wurde
SET @languageIdGerman=0x2FBB5FE2E29A4D70AA5854CE7CE3E20B ;
SELECT IF(COUNT(product.id)>0,"FALSE","TRUE") AS categoryIsAvailableForMasterProduct
FROM product
JOIN product_translation ON product.id=product_translation.product_id AND product_translation.language_id= @languageIdGerman
JOIN product_category ON product.id=product_category.product_id
WHERE product_category.product_id IS NULL
AND parent_id IS NULL;
Das ist schwierig zu beantworten, zumal es z.B. bei Bestellungen lange entweder zufällig oder schlichtweg falsch war. Solange eine entity auch eine version hat, solltest du immer (!) nach der live version filtern. Da die version id auch immer Bestandteil des primary keys (bzw. index) ist, hat das alleine schon Vorteile bei der performance.
Am Beispiel product joint product_category:
SELECT *
FROM product
LEFT JOIN product_category
ON product.id = product_category.product_id AND product.version_id =
product_category.product_version_id
WHERE product.version_id = :live
(Wobei hier streng genommen noch zwingend die category gejoint werden müsste, ebenfalls inkl. live version)
Viele Grüße
Ich hab bei meinen Projekten mal geschaut, die haben alle die Defaults::LIVE_VERSION (0fa91ce3e96a4bc2be4bd9ce752c3425), trotzdem sollte man das im Blick behalten, bin bei den Bestellungen schon mal bös reingefallen
Ist die Frage, was Du damit erzielen willst. Aktuell wäre das bei mindestens einem Masterprodukt, was einer Kategorie zugewiesen ist, TRUE, da der COUNT dann größer 0. Ich vermute, das war aber nicht die Absicht, oder? Bei der Variante kannst Du auch die Translation rauslassen, da nie verwendet.
Die Absicht ist das genaue Gegenteil. Wenn mindestens ein Master Produkt, keiner Kategorie zugeordnet ist soll FALSE ausgegeben werden, wenn alle Master Produkte einer Kategorie zugeordnet sind soll TRUE ausgegeben werden!