Autor | Zpráva | ||
---|---|---|---|
maarlin Profil |
#1 · Zasláno: 30. 1. 2010, 13:59:06 · Upravil/a: maarlin
Mám následující 2 dotazy:
SELECT COUNT(*) FROM comments WHERE content = 'xyz' AND author = 'abc'; -> zjištěný poč. výsledků mi podmíní vykonání tohoto dotazu REPLACE INTO comments SET content = 'xyz', author = 'abc'; Zkoušel jsem různé konstrukce s IF EXISTS a INSERT ... ON DUPLICATE KEY UPDATE, ovšem obávám se, že to není přesně to, co bych potřeboval. Potřebuji zajistit, že v tabulce se nevyskytnou dva záznamy, které budou mít stejný content a author a pokud se někdo pokusí vložit stejný content s jiným author, tak se záznam upraví (REPLACE) a to ideálně vše jedním dotazem. S tím souvisí druhý dotaz - je velký časový rozdíl v subqueries a oddělených dotazech? Zatížím server více, když zpracuji 2 dotazy a propojím je via PHP, než když napíšu jeden SQL dotaz? Pokud jde o takovéto věci (výše zmíněné), asi by to měla mít v režii spíše databáze, že? |
||
TomášK Profil |
#2 · Zasláno: 30. 1. 2010, 14:20:54
myslím, že pomůže
CREATE UNIQUE INDEX idx_comments_author_content ON comments(author, content) Většinou je rychlejší jeden dotaz, ale nejde to generalizovat. Problém se dvěma dotazy je spíš v tom, že v mezičase může proběhnout další dotaz, a najednou podmínka, který byla ověřená prvním dotazem přestane platit, ale druhý dotaz se stejně provede. Řeší se to pomocí transakcí. |
||
maarlin Profil |
#3 · Zasláno: 30. 1. 2010, 14:57:26 · Upravil/a: maarlin
Díky, zkusím
|
||
maarlin Profil |
#4 · Zasláno: 30. 1. 2010, 15:30:36 · Upravil/a: maarlin
Téměř to funguje, jak má... ale mám trošku problém v tom, že to UPDATuje záznamy, i když jsou totožné. Jde mi o to, že u každého záznamu mám ještě sloupec last_update, který by samozřejmě měl být pravdivý... tedy aby update proběhnul opravdu jen v případě, že se záznamy liší. Respektive aby se za update nepovažovalo přepsání stejných hodnot...
|
||
Časová prodleva: 14 let
|
0