Autor Zpráva
maarlin
Profil
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
myslím, že pomůže
CREATE UNIQUE INDEX idx_comments_author_content  ON comments(author, content)
a poté INSERT ... ON DUPLICATE KEY UPDATE.
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
Díky, zkusím
maarlin
Profil
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...

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: