Hu Gb

MySQL table backup

2011.08.08
Éles rendszereknél amikor valamilyen nagyobb update lekérdezést kell futtatnom egy táblán, először egy "backup" táblán szoktam lefuttatni. A backup tábla létrehozására egy időben ezt a megoldást használtam:
create table backup_table as select * from table
Ezzel a megoldással annyi problémám volt, hogy az indexeket nem tartotta meg, ezért elkezdtem a mysql dokumentációban jobb megoldást keresni. Sajnos egy lekérdezéses megoldást nem sikerült összehoznom, de ez a két lekérdezés pillanatok alatt lefut:
create table backup_table like table;
insert into backup_table as select * from table
Továbbolvas

MySQL order a join táblán

2011.01.06
Érdekes problémába ütköztem a napokban. Adott egy lekérdezés amiben szerepel egy join. Például vannak termékeink, amik több raktárban is szerepelnek, és minden raktárhoz tartozik egy ár, illetve egy darabszám.
Továbbolvas

MySQL trim függvény

2010.03.28
A MySQL-ben is van trim függvény, ami esetenként hasznos lehet. Alap esetben a függvényt meghívás után vissza adja szóközöktől megtisztított stringet:
SELECT TRIM('  szöveg   ');
//az eredmény 'szöveg' lesz
De ennél több van ebben a függvényben.
Továbbolvas

MySQL replace függvény

2010.03.02
A MySQL replace() függvényének ismerete sokszor hasznos lehet ha valamitől meg kell tisztítani az adatbázisban az adatokat, esetleg valamilyen szeparátort le kell cserélni.
Továbbolvas

MySQL replace into

2010.01.22
A MySQL replace into ugyanúgy működik mint az insert, azzal a kivétellel hogyha a táblában található egy sor ugyanazzal a Primary Key-el vagy Unique index-el, akkor először azt törli és utána illeszti be az új sort. Hasonló tehát az Insert into ..... on Duplicate Key Update művelethez.
Továbbolvas

Mysql duplicate rows

2009.12.05
Egy project alkalmával szembesültem a címben említett problémával. Adott volt egy adatbázis tábla melyben voltak duplikált sorok. A feladat ezeknek a soroknak a törlése volt. Első gondolatom egy temporary table megoldás volt, miszerint csinálok egy temp táblát abba egy selectel distinct -el a duplikációt jelző mezőn átrakom a recordokat és utána az eredeti táblát törlöm, a temp-et pedig átnevezem az eredeti nevére:
create table temp as select * from table1 group by field;
drop table table1;
rename table temp to  table1;
Ez a megoldás teljesen jól működik és elvégzi a kivánt feladatot, de ha php-ból szeretnénk megvalósítani akkor ez három lekérdezés lesz, mert a multiple query az általában tiltva van. Ezért elkezdtem keresni egy elegánsabb megoldást és találtam is. A dolog lényege hogy a táblánakt kétszer is használjuk a queryben egy alias-sal:
delete from table1
using table1, table1 as temp_table
WHERE (table1.id> temp_table.id)
AND (table1.field=temp_table.field)
A fenti lekérdezés megnézi hogy a két táblában (ami tulajdonképpen ugyanaz csak más néven) vannak olyan rekordok ahol a duplikált mező egyezik, viszont az azonosító nem(mert ha ez is akkor mindkét sort törölnénk), és törli ezeket.
Továbbolvas