Adatbázis: SQL, XML DB

[Megoldva] Mosthoz képest 5 perccel ezelőtt

UPDATE megoldás:


SELECT * FROM table WHERE date_field > DATE_SUB(NOW(), INTERVAL 5 MINUTE) AND date_field <= NOW()

---------------------

Adott a feladat, hogy az 5 percen belüli rekordokat jelenítsem meg. Az alábbit sikerült kisakkoznom, kérdés, van-e egyszerűbb, vagy ez elfogadható megoldás? (nem vagyok SQL mágus :(()


SELECT * FROM table
WHERE DATEDIFF(NOW(), date) = 0
AND HOUR(TIMEDIFF(NOW(), date)) = 0
AND MINUTE(TIMEDIFF(NOW(), date)) < 5

Köszi!

Postgresql-ben léptetési parancs létezik?

Sziasztok.

Nem vagyok egy adatbázis guru (és nem is szakmám, csak rám lett oszvta, hogy oldd meg), de egy problémát szeretnék elegánsabban megoldani mint most. Adott egy tömb egy oszlopa, ami tartalmazza azt, hogy hány panasz érkezett egy temékre. Ezen szám lépetését úgy oldottam meg, hogy select-el lekérdezem hozáadok/levonok 1-eet majd update. Van erre slegánsabb megoldás? Mint C-ben pl az valtozo++, valtozo--?

[elhalasztva] postgresql to_ascii(utf8_szoveg)

Van egy psql szkriptem, amiben to_ascii(szoveg) függvényt hívnék meg, de mivel a szoveg UTF8-as kódolású adatbázisban van, ez hibát ad. Segítséget kérek, hogy ékezetes UTF8-as adatbázistartalmat lehet-e egyszerűen ékezetmentesíteni röptében? Itt: http://www.postgresql.org/docs/9.0/static/functions-string.html látható az utf8_to_ascii, csak épp az nem, hogy hogy kellene használni.

Egy gyatra kerülőutam már van; leválogatom a szükséges adatokat $f fájlba, majd
cat $f |iconv -f utf-8 -t us-ascii//TRANSLIT|perl -p -w -e "s/'//g;s/://g;s/\"//g"> $f\_out
módon átalakítom a kimenetet, s azt visszafrissítem. De ennél egy adatbázisközelibb megoldásra vágynék.

AB struktúra

Urak,

Az alábbi feladatra szeretnék egy épkézláb adatbázis modelt:
-A rendszer alapvetően modulokból áll (pl felhasználók, események, üzenetek, termékek, stb)
-Egy egy modulon belül az oszlopok száma akár ezres nagyságrendű lehet. (pl. felhasználói adatok: lakcím, anyja neve, kedvenc szín, kedvenc film, stb)
-Egy-egy modulnak az oszlopainak az írási jogosultságának AB szintű meghatározása (ezt csak alkalmazás oldalon fontos az íráskor)
-Modulok összekapcsolásának a lehetősége (Pl 'A' user be van sorolva egy 'B' eseményre)
-Modulok összekapcsolásához kiegészítő oszlopok definiálása (pl 'A' user egy adott 'B' eseményen megjelent, értékelések mentése, stb)
-Felhasználó által összeválogatott nézetek megvalósításának elmentése modulonként: kiválasztott oszloplisták és szűrőfeltételek elmentése az adatbázisba.
-Adatbáziskezelő indexelési képességének kihasználása, modulonként fix számú (nem sok) oszlopra.

Mysql regexp ő ű probléma, de nem kódolás...

Egy érdekes problémába futottam, leszűkítettem amennyire tudtam, a végeredményt írom, amire nem tudok magyarázatot.

select search_betu,lower(title) from lexikon WHERE LOWER(lexikon.title) REGEXP '^ő'; --megtalálja az űrsíklót.

pl.:

+-------------+-------------------------------------------------------------------------------------------------------------------+
| search_betu | lower(title) |
+-------------+-------------------------------------------------------------------------------------------------------------------+
...
| o | őszibarackfa |
| o | ősz |
| u | űrsikló (space shuttle) |
| o | őszapó |
...
+-------------+-------------------------------------------------------------------------------------------------------------------+

select search_betu,lower(title) from lexikon WHERE LOWER(lexikon.title) REGEXP '^ű'; --ez csak az ű söket találja mEG!!!

+-------------+---------------------------+
| search_betu | lower(title) |
+-------------+---------------------------+
| u | űrbél |
| u | űrlap |
| u | űrsikló (space shuttle) |
+-------------+---------------------------+

tehát: az ő -re megtalálja az ű-t, de fordítva nem!!!!!!!!!
Tisztában vagyok vele, hogy a mysql regexp byteokon működik:

Warning

The REGEXP and RLIKE operators work in byte-wise fashion, so they are not multi-byte safe and may produce unexpected results with multi-byte character sets. In addition, these operators compare characters by their byte values and accented characters may not compare as equal even if a given collation treats them as equal.

De itt nem ez a probléma, [ő] esetén lehetne mondjuk, mert 2 byteos.

A title oszlop, és maga a table is utf-8 hungarian_ci collation.

Konstansra jó minden kombináció:

mysql> select 'űrsikló (space shuttle)' regexp '^ő';
+------------------------------------------+
| 'űrsikló (space shuttle)' regexp '^ő' |
+------------------------------------------+
| 0 |
+------------------------------------------+
1 row in set (0.00 sec)

minden utf-8, a konzol, a mysql kliens kódolása, a szerver default kódolása...

Gentoo mysql:
[ebuild R ] dev-db/mysql-5.1.56 USE="cluster community ssl -big-tables -debug -embedded -extraengine -latin1 -max-idx-128 -minimal -pbxt -perl -profiling (-selinux) -static -test -xtradb" 0 kB

--------------------------------------------

szerk: utf8_general_ci esetén a hiba nem jelentkezik! találomra pl. utf8_lithuanian_ci nél is hibás :D

Postgresql függvény 2db. INOUT paraméterrel

Sziasztok!

PostgreSQL-ben próbálok egy adatbázist összeállítani, és egy TRIGGER-ből hívott pl/pgsql függvény kifogott rajtam.
A függvény fejléce a következő:

CREATE OR REPLACE FUNCTION next_phs_link(
INOUT rec phs_links, -- Az aktuális fizikai link rekord, majd a következő
INOUT sh portshare, -- SHARE, ha NULL, akkor nincs következő rekord
IN dir linkdirection -- Irány Right: 1-2->, Left <-1-2
) AS $$
...
$$ LANGUAGE plpgsql;

Az első paraméter egy rekord, a második, és harmadik egy-egy saját enumerációs típus.
Meghívva a függvényt, függvény egy új rekord értékkel térne vissza, és egy másik enumerációs értékkel.
Ha simán meghívom a függvényt:
RAISE next_phs_link(lrec_r, psh, dir);

Akkor a parancs után a vártnak megfelelően megváltozik a psh változó értéke, de a lrec_r nem, pedig a függvényben értéket adok neki egy SELECT lekérdezésben.

Találtam a neten egy hívási formát, kipróbáltam:
lrec_r := (next_phs_link(lrec_r, psh, dir)).rec;

Ezzel már megkapta az lrec_r változó a megfelelő értéket, viszont a psh változó értéke maradt a hívás előtti, hiába kapott értéket a függvényben.

Valaki árulja el hogyan kell ezt csinálni, mert én valamit úgy látszik nem értek.
A válaszokat előre is köszönöm.

trigger selectel

Üdv!
Meggyűlt a bajom a triggerekkel.
Szituáció.:
1.: cikk tábla cikk_id;keszletre
2.: lista tábla cikk_id;menny;vont
3.: keszlet tábla cikk_id;menny.

Azt szeretném, ha a listába beírva egy cikket a keszlet tábla mennyisége akkor változna, ha a cikk táblába készletre = 'i' és a lista táblába a vont <1. Remélem érthető :)

Amit kreáltam:

CREATE TRIGGER `tg_lista_insert` AFTER INSERT ON `lista`
FOR EACH ROW begin
if (select keszletre from cikk where cikk_id=NEW.cikk_id AND cikk.keszletre='i') and NEW.vonid < 1 then
update keszlet set menny=menny+NEW.menny where cikk_id=NEW.cikk_id and raktar_id=NEW.raktar_id;
end if;
end
//

Ha nincs benne a készletre figyelés azaz a zárójelben lévő rész tökéletesen lefut a trigger.

Mit néztem be, ami miatt nem változik a menny értéke?

pch