edit Уреди тему

Специјални SQL упити

Никола Радовановић11. Март 2009. 00:03

Дупликати

Вероватно сте имали потребу да поседујете базу са великим бројем поља и желите да проверите да ли се у њој налазе дупликати, али не по једној колони већ по две или више. нпр. у табели „korisnici“ имате колону „ime“ и колону „prezime“ и желите да пронађете дуплиране кориснике. То можете урадити следећим SQL упитом:

SELECT `ime`,`prezime`,count(*) as total FROM `korisnici` GROUP BY `ime`,`prezime` HAVING count(concat(`ime`,`prezime`)) > 1

Упит ће вратити списак дуплираних имена и презимена са бројем дупликата, наравно уколико уопште у табели постоје дупликати.

Када сте сазнали за постојање дупликата, можете их обрисати и онемогућити нихово појављивање у будућности, тако што ћете поставити јединствени кључ на ове две колоне следећим SQL упитом:

ALTER IGNORE TABLE `korisnici` ADD UNIQUE INDEX(`ime`,`prezime`)

Приступ вредностима последњег реда у табели

Вредностима одређеног реда у табели можете приступити филтером по било којој колони табеле, то није проблем. Али како приступити реду табеле чије податке не знамо, знамо само да је последњи, уколико имамо „id“колону,  једноставно следећим SQL упитом:

SELECT * FROM `korisnici` ORDER BY `id` DESC LIMIT 1

Али уколико, неким чудом, не поседујете „id“колону, прво морате сазнати број редова командом:

SELECT count(*) FROM  `korisnici`

`` а затим приступити реду под тим бројем умањеним за 1, нпр. ако је број редова „2358“, користите следећи SQL упит:

SELECT * FROM `korisnici` LIMIT 2357,1

Избор вредности из претходног/наредног реда из табеле

Избор вредности претходног/нарденог реда није компликовано добити уколико вредности „id“колоне иду редом, без прескакања 1,2,3,4,5 …, али уколико се уклони неки ред нпр. са бројем 3 на његовом месту остаје „рупа“ и претходни ред реда 4 више није 3, већ 2. Наравно и за то има решење. Избор вредности претходног ID-а:

SELECT `id` FROM `mојаtablа` WHERE `id` < trenutni_id ORDER BY `id` DESC LIMIT 1

Избор вредности наредног ID-а:

SELECT `id` FROM `mојаtablа` WHERE `id` > trenutni_id ORDER BY `id` ASC LIMIT 1

Како бисте поставили Ваш коментар морате се учланити/пријавити на сајт.