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 |
#2 · Zasláno: 2. 6. 2012, 19:49:10
Všechny výsledky z SELECTU fetchni a pak foreachem UPDATE
|
||
Prochy Profil |
#3 · Zasláno: 2. 6. 2012, 20:11:43
Ano, to mě taky napadlo, ale říkal sem si, že by bylo lepší to udělat přímo v tom updatu.
|
||
Tori Profil |
#4 · Zasláno: 2. 6. 2012, 22:10:22
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 |
#5 · Zasláno: 2. 6. 2012, 22:27:48
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.
|
||
Časová prodleva: 12 let
|
0