Mam następujące zapytanie, które aktualizuje zapasy produktów dla konkretnych dostawców.

UPDATE
    ps_stock_available AS sa
INNER JOIN
    ps_product AS p 
ON 
    p.id_product = sa.id_product
SET
    sa.quantity = 0,
    p.quantity = 0
WHERE
    p.id_supplier = 18

Zapytanie pracuje dla dostawców z małą ilością produktów, ale utknie z dostawcą ponad 1k produktami.

/Lost connection to MySQL server during query/

Nie mam dostępu do plików konfiguracyjnych, więc szukam sposobu na zmniejszenie ilości czasu potrzebnego do prokcasu.

Czy jest jakiś sposób na zmniejszenie czasu potrzebnego czasu lub aktualizacji produktów w wielu partiach? Używam PrestaShop CMS, jeśli ktoś jest znany z nim.

1
ph0enix993 17 luty 2017, 17:13

2 odpowiedzi

Najlepsza odpowiedź

Rozwiązałem problem samodzielnie.

Zamiast próbować upowszechniać w górę obu tabel jednocześnie aktualizować bazę danych w partiach.

Następujący kod jest napisany w PHP:

Wybiera wszystkie identyfikatory, które pasują do kryteriów mojej aktualizacji (Połącz się z bazą danych, wykonaj zapytanie)

select ps_product.id_product FROM ps_product
INNER JOIN ps_stock_available on ps_product.id_product=ps_stock_available.id_product
WHERE ps_product.id_supplier=18

Napisz identyfikatory na tablicę

$i=0;
    $id;
    $result = $conn->query($sql);
    if ($result->num_rows > 0) {
        while($row = $result->fetch_assoc()) {
            $id[$i]=$row["id_product"];
            $i++;
        }
    } else {
        echo "No products with chosen supplier in database.";
    }

Podczas zapętlenia tablicy w tworzeniu konkretnych zapytań aktualizacji dla każdego ID i wykonania ich.

$arrlength = count($id);

for($x = 0; $x < $arrlength; $x++) {

$sql2=
"
UPDATE ps_stock_available
SET 
quantity=0
WHERE id_product=".$id[$x]."
";
if ($conn->query($sql2) === TRUE) {
    echo $x.", ";
}

Byłoby prawdopodobnie inteligentne, aby sprawdzić połączenie MySQL za każdym razem, gdy aktualizuję bazy danych, aby upewnić się, że nie rozłącza się, ale działa na razie. :)

0
ph0enix993 19 luty 2017, 20:35

Spróbuj aktualizować wartość "Connection Read Timeout" na serwerze MySQL.

Zmień wartość domyślną w pliku konfiguracyjnym MySQL (opcja Connect_Timeout w sekcji MySQLD) -

[mysqld]
connect_timeout=100

Jeśli ten plik nie jest dla Ciebie dostępny, możesz ustawić tę wartość za pomocą tego oświadczenia -

SET GLOBAL connect_timeout=100;

Spróbuj ustawić wartość do czegoś więcej niż bieżącej wartości i sprawdzić, czy działa, spróbuj zwiększyć wartość, jeśli nie.

0
Knowband Plugins 25 luty 2017, 06:43