THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline

#1 Table cart imposante

(19-06-2016 11:10:19)


Bonjour à tous,

Je viens de faire passer une boutique de Thélia 2.2.1 à 2.3.2. En regardent le poids des tables de ma BDD, je me rend compte que la table cart à plus de 77000 lignes pour un poids d'environ 19Mio.

Il s'agit d'une petite boutique ouverte il y a un an avec moins de 100 commandes validées au total.

Il y a moyen de nettoyer cette table (et celle associées) pour qu'elle reprenne un poids raisonnable ?

Offline

#2 Re: Table cart imposante

(19-06-2016 15:24:39)


Bonjour,

Il existe un module pour ça:
https://github.com/thelia-modules/RemoveUselessCart

Offline

#3 Re: Table cart imposante

(19-06-2016 17:25:50)


Merci. Je viens de le tester, j’obtiens une erreur SQL du à une contrainte d’intégritée sur la table order.

SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`theliaTest`.`order`, CONSTRAINT `fk_order_cart_id` FOREIGN KEY (`cart_id`) REFERENCES `cart` (`id`)) 

Dans le fichier RemoveUselessCartEventListeners.php, j'ai modifier les requêtes comme ci-dessous :

        if (!$event->getRemoveAll()) {
            $sqlRemoveCarts =
                "DELETE `cart` FROM `cart`
                    LEFT JOIN `cart_item` ON ( `cart`.`id` = `cart_item`.`cart_id` )
                    LEFT JOIN `order` ON ( `order`.`cart_id` = `cart`.`id` )
                        WHERE `cart`.`UPDATED_AT` <= :startDate AND `cart_item`.`QUANTITY` IS NULL AND `order`.`cart_id` != `cart`.`id` ";
        } else {
            $sqlRemoveCarts =
                "DELETE `cart` FROM `cart`
                    LEFT JOIN `cart_item` ON ( `cart`.`id` = `cart_item`.`cart_id` )
                    LEFT JOIN `order` ON ( `order`.`cart_id` = `cart`.`id` )
                        WHERE `cart`.`UPDATED_AT` <= :startDate AND `order`.`cart_id` != `cart`.`id` ";
        }

La première a bien supprimer 89 panier, mais la seconde (qui doit supprimer les panier non vide) n'a aucun effet. Je dois faire une erreur quelques part certainement. Une idée ?

Offline

#4 Re: Table cart imposante

(20-06-2016 07:26:58)


Pour les paniers avec produits, j'aurais plutôt fait:

$sqlRemoveCarts =
                "DELETE `cart` FROM `cart`
                    LEFT JOIN `cart_item` ON ( `cart`.`id` = `cart_item`.`cart_id` )
                        WHERE `cart`.`UPDATED_AT` <= :startDate AND `cart_item`.`id` IS NOT NULL";

Mais le problème à la base vient de la structure de ta base de données,

CONSTRAINT `fk_order_cart_id`

n'existe plus depuis Thélia 2.0.5

https://github.com/thelia/thelia/blob/7 … 0.5.sql#L3

Last edited by informatiqueprog (20-06-2016 07:44:33)

Offline

#5 Re: Table cart imposante

(20-06-2016 20:12:25)


Effectivement sans la contrainte plus de soucis. Par contre, je ne sais pas pourquoi elle y était toujours.
J'ai jamais eu de problème lors des mise à jour de Thélia.

Merci pour ton aide. wink