Autor Zpráva
lopik
Profil
Dobrý deň, chcem len povedať, že sa v SQL veľmi nevyznám, som začiatočník avšak potrebujem spraviť jednu vec na eshope.
Potrebujem spojiť tabuľu "produkty" a "ceny_produktov" cez ich rovnaké id. To by som zvládol. Avšak potrebujem nakopírovať z rodičovských produktov (parent_id rodičovského je vždy 0) ceny (ak nie sú nulové, tzn. kopírovať len tie, ktoré majú vyplnenú cenu) na všetky dcérske produkty (dcérsky produkt má vždy parent_id = id rodičovského produktu), ale len v tom prípade, ak dcérsky produkt cenu už nemá vyplnenú (tzn. jej hodnota je prázdna)

tabuľka ceny_produktov má stĺpce (len tie ktoré treba píšem) id, cena
tabuľka produkty má stĺpce id, parent_id

Viete mi prosím poradiť ako to spraviť?

Ďakujem
Tomášeek
Profil
lopik:
Achjo...

„Komplexná tvorba internetových web stránok spĺňajúcich vaše predstavy...“ a neumíš napsat ne úplně složitý SQL dotaz? Navíc, když jsi schopný ten dotaz poměrně přesně zformulovat textově, což bývá často ta složitější část, tak přepsat jej do SQL by snad neměl být problém...
lopik
Profil
Tomášeek:
možno to bude tým, že tvorba webov je moje "hobby" nie môj džob. robím weby občas vo voľnom čase a dúfal som, že mi bude niekto ochotný s týmto pomôcť.... učím sa aj vďaka príkladom....
Tomášeek
Profil
lopik:
že tvorba webov je moje "hobby" nie môj džob. robím weby občas vo voľnom čase
Hm, škoda, že to podle tvého webu nevypadá. Dokonce je vás dle množného čísla více, některý z kolegů ti neporadí? „Množství úspěšných projektů“ jste zvládli v týmu bez základů SQL? Nebo si jen vymýšlíme?
Keeehi
Profil
Těch možností je spousta. Pokud nevyplněná hodnota znamená, že tam je null, pak se dá použít ifnull.
SELECT IFNULL(cena_potomka, cena_rodice)

Pokud je to třeba prázdný řetězec, nula, nebo něco takového, pak if. A nebo konstrukce CASE WHEN THEN ELSE END.
Kajman
Profil
lopik:
Chcete dělat insert nových řádků, nebo tam již jsou řádky s nulovou cenou (nebo null hodnotou) a chcete udělat update?

Verze od Keeehi je opačný přístup. Že ta hodnota tam být nemusí být uložená a cena se získá až při získávání dat pro výpis. Má to výhodu v tom, že při změně rodičovského produktu se uživatelům ovlivní cena všech podproduktů, které nemají napevno nastavenou jinou cenu.
lopik
Profil
Kajman:
Dobrý deň, produkt, ktorý nemá zadanú cenu nemá riadok v danej tabuľke, takže ho budem musieť vložiť.
lopik
Profil
Skúšal som vytvoriť kadečo, ale nič iné okrem vypísania produktov, ktoré majú rovnaké parent_id, či vypísanie produktov, ktoré nemajú zadanú cenu neviem. A neviem ani ako to spojiť, aby sa to porovnalo a potom prekopírovalo. Bol by mi to niekto ochotný napísať, s tým, že by som bol ochotný si za to zaplatiť, keďže to potrebujem. Hľadal som na nete množstvo podobných prípadov, no nič také, čo by som vedel v mojom prípade aplikovať neviem a keďže s SQL nemám skúsenosti, bol by som rád pomoci. Ďakujem
Kajman
Profil
Zkuste
SELECT cil.id,
       ceny_vzor.cena
FROM   produkty vzor
       JOIN produkty cil
         ON vzor.id = cil.parent_id
       JOIN ceny_produktov ceny_vzor
         ON vzor.id = ceny_vzor_id
       LEFT JOIN ceny_produktov ceny_cil
              ON cil.id = ceny_cil.id
WHERE  ceny_cil.id IS NULL

A pokud to je to, co chcete doplnit, přidejte před to insert.

Pokud je více zanoření než jedno, můžete dotaz pouštět do té doby, dokud přidává nějaké řádky.
lopik
Profil
Ďakujem, funguje to skvele :) Môžem Vám niekde zaslať všimné?

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:

0