Autor Zpráva
Prochy
Profil
Zdarvim,
snažim se vytvořit UPDATE dotaz z jichž udělaného SELECT dotazu, ale nějak mi to nezmění ty data, co mi to vybere v select dotazu:
SELECT dotaz:
SELECT prepaid_products.identificator FROM prepaid_products
JOIN sold_products ON(sold_products.id_prepaid_product=prepaid_products.id)
LEFT JOIN visits ON(sold_products.id=visits.sold_products.id)
WHERE 
ROUND((sold_products.number_therapies-COALESCE((SELECT SUM(count_therapies) FROM visits WHERE visits.sold_product_id=sold_products.id),0)),2)<=0
GROUP BY prepaid_products.id

A zde UPDATE dotaz:
UPDATE prepaid_products
JOIN sold_products ON(sold_products.id_prepaid_product=prepaid_products.id)
LEFT JOIN visits ON(sold_products.id=visits.sold_products_id)
SET prepaid_products.status=3
WHERE
ROUND((sold_products.number_therapies-COALESCE((SELECT SUM(count_therapies) FROM visits WHERE visits.sold_products_id=sold_products.id),0)),2)<=0

Byl by někdo prosím tak hodný a kouknul se na to, v čem by mohl být problém?
greeny
Profil
Všechny výsledky z SELECTU fetchni a pak foreachem UPDATE
Prochy
Profil
Ano, to mě taky napadlo, ale říkal sem si, že by bylo lepší to udělat přímo v tom updatu.
Tori
Profil
Prochy:
Problém je v tom, že v prvním dotazu seskupujete data a v druhém ne, takže ve WHERE vycházejí odlišné hodnoty. Výsledek SELECTu, kterým vyberete řádky k updatu, bych dala jako samostatnou tabulku a spojila s prepaid_products podle asi ID, nebo čeho (viz zvýrazněné sloupce). Něco takového:

UPDATE prepaid_products INNER JOIN 
  (SELECT prepaid_products.identificator FROM prepaid_products
  JOIN sold_products ON sold_products.id_prepaid_product=prepaid_products.id
  LEFT JOIN visits ON sold_products.id=visits.sold_products.id
  WHERE ROUND((sold_products.number_therapies-COALESCE((SELECT SUM(count_therapies) FROM visits 
    WHERE visits.sold_product_id=sold_products.id),0)),2) <= 0
  GROUP BY prepaid_products.id) ref ON prepaid_products.identificator = ref.identificator
SET prepaid_products.status=3
Prochy
Profil
Ten úvodní SELECT jsem zkoušel také bez toho GROUP BY a vyhodilo mi to stejné záznamy, které jsem potřeboval změnit, akorát se tam objevili dejme tomu dvakrát či vícekrát, což by tak nevadilo. Jinak vyzkouším váš napád dík.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: