| Autor | Zpráva | ||
|---|---|---|---|
| marian80 Profil |
#1 · Zasláno: 14. 1. 2022, 00:09:50
Zdravím znova. Je možné pomocou DiBi aktualizovať viaceré záznamy v DB ale použiť pri tom iba jeden prístup, požiadavku?
Mám tabuľku TOVAR, v nej mám stĺpec POCET (typ INT). Teda počet kusov jednotlivých tovarov. A teraz potrebujem pridať ku každému tovaru rôzne nové počty, napr. k tovaru A 5ks, k tovaru B 12ks, tovar C 3 atď. Napadlo ma vytiahnuť pôvodný počet jedného tovaru, pripočítať určité číslo a pomocou UPDATE ho znova nahrať do DB. To sú ale dve požiadavky na jednu položku tovaru. Ak bude položiek sto, tisíc, tak už je to veľká záťaž pre databázu, alebo nieje? Ešte by možno bolo riešenie jedným QUERY vytiahnuť potrebné ID tovarov a ich POCTY, vložiť do Array, v PHP pripočítať potrebné nové počty, z tých potom vytvoriť druhý Array a to nejako všetko naraz jedným QUERY zase aktualizovať pomocou UPDATE. Len to absolútne neviem či je vôbec možné a ak áno, ako na to. |
||
| Keeehi Profil |
Vynechávám teď dibi, jelikož to je jen vrstva nad sql.
Ano, je možné to udělat jedním dotazem. Dokonce ani není třeba data tahat do PHP. UPDATE
tovar
SET
pocet = CASE
WHEN tovar_id = 'A' THEN pocet + 5
WHEN tovar_id = 'B' THEN pocet + 12
WHEN tovar_id = 'C' THEN pocet + 3
END
WHERE
tovar_id IN ('A', 'B', 'C')Druhá možnost je využít insert. V takovém případě si budeš muset ty data načíst (jedním dotazem), změnit v PHP a jedním dotazem je zase můžeš zapsat. INSERT INTO
tovar (tovar_id, pocet)
VALUES
('A', 15),
('B', 22),
('C', 13)
ON DUPLICATE KEY UPDATE
pocet=VALUES(pocet) |
||
| Kajman Profil |
#3 · Zasláno: 14. 1. 2022, 09:50:51
marian80:
„Ak bude položiek sto tisíc“ Pokud se mění hodně řádků, udělal bych si pomocnou (asi temporary) tabulku. Do ní dal insertem (to dibi umí) nebo load from file podklady pro změnu a pak lze napsat update čerpající data z této pomocné tabulky. |
||
|
Časová prodleva: 4 roky
|
|||
0