Adatbázis: SQL, XML DB

Három view-ból egy selectet.

Üdv,

Kalapáltam három view-t:


create or replace view group_pay as  select tid,sum(amount) as amount from payments group by tid;
create or replace view group_inc as  select tid,sum(amount) as amount from incomes group by tid;
create or replace view balance_per_tenants
       as
       select group_pay.tid,
              tenants.name,
              group_inc.amount - group_pay.amount as balance
       from group_pay,group_inc,tenants
       where group_inc.tid=group_pay.tid
       and
       tenants.id=group_pay.tid;

Magyarázat: van három tábla, a tenants, payments, incomes. A tenatns a bérlők listája, a payments, incomes a fizetendő illetve befizetett összegek listája, azonosító, befizetőazonosító, dátum és összeg szerepel. Arra vagyok kíváncsi, hogy az egyes bérlők befizették-e a megfelelő összegeket. A fenti három view ezt megoldja, a select * from balance_per_tenants; marha gyorsan le is fut, ám lehet hogy jobb lenne:

- nem az sql-ben tárolni az üzleti logikát (vagy mit)
- egy selectben megoldani az egészet.

A második érdekel elsősorban, bár a filozófiai kérdés (üzleti logika sql-ben) is, de az csak haloványan. Igazság szerint csináltam egy join-os selectet, de az kb. 1,5 percig futott és rossz eredményt adott vissza :D

Update: mysql az alany.

REPLACE INTO nem működik. [MEGOLDVA]

Üdv mindeninek,

Sajnos nem vagyok SQL expert ezért egy kis segítséget szeretnék kérni mysql ügyben.

Adatot gyűjtök adatbázisba és sokszor előfordul, hogy az időközönként kapott adat nem új adat hanem az előző.
Szeretném elkerülni azt, hogy ilyen esetekben többszörösen legyen ugyanaz az adat az adatbázisban.
Arra gondoltam, hogy a REPLACE INTO segítségével ez megoldható.


CREATE TABLE testing (city INT, date DATETIME, value FLOAT) ENGINE=MyIsam DEFAULT CHARSET=UTF8;

REPLACE INTO testing (city,date,value) VALUES (35,'2012-11-30 21:00:00',3.81);
REPLACE INTO testing (city,date,value) VALUES (35,'2012-11-30 21:00:00',3.81);

SELECT * FROM testing;
+------+---------------------+-------+
| city | date | value |
+------+---------------------+-------+
| 35 | 2012-11-30 21:00:00 | 3.81 |
| 35 | 2012-11-30 21:00:00 | 3.81 |
+------+---------------------+-------+

Látszólag duplikálódnak az adatok pedig ha már létezik egy megegyező rekord akkor nem kellene...

Én gondolom rosszul a REPLACE működését vagy rosszul csinálok valamit?

A válaszokat előre is köszönöm.

Szegyenszemre : MYSQL GRANT....-.-

Mar nem tudok mit csinalni, szegyenszemre ezt kell megkerdeznem:

Van nekem egy trixboxom, ezt mar regota faragom, elnyerte azt a format mara, amit szerettem volna. MOst felmerult egy ujabb igenyem, ezt szerettem volna megvalositani egy par soros PHP koddal, tovabba, azzal, hogy ez a kod egy mysql ben ujonnan letrehozott adatbazisanak adattablajaba irkal. DE.:

Belepek root tal, create database, create table, GRANT ALL....esigytovabb... Most a show grants userem@localhost; parancsra ez jon ki:

+--------------------------------------------------------------------------------------------------------------+
| Grants for roy@localhost |
+--------------------------------------------------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'userem'@'localhost' IDENTIFIED BY PASSWORD '2c0397c26325718c' WITH GRANT OPTION |
| GRANT ALL PRIVILEGES ON `frontin`.* TO 'userem'@'localhost' |
+--------------------------------------------------------------------------------------------------------------+

Aszongya, hogy "Access denied for 'userem'@'localhost' to database 'frontin'"

Ezt termeszetesen lejatszottam root tal, ugyanezzel a vegkicsengessel. A dolognak a fonakja, hogy engedelyeztem a useremnek, hogy 'userem'@'192.168.xxx.xxx' belsohalorol UGYANEZZEL a szkripttel /amit ugye ennek megfeleloen a mysql_connect nel atirtam/ egy masik geprol tamadjon, ebben az esetben csont nelkul megyen.

Mostmar csak arra gondolok, hogy valami a mysql jogosultsagokon kivul tilthatja, hogy localhostrol barmit is lehessen php val kavarni. Korabban is jatszottam mar php val es mysql lel, igaz soha nem trixbox os kornyezetben, de a google val nem lettem okosabb. Megneztem a phpinfo() val a gepeket, a MYSQLI reszeknel tok egyformak voltak....Mostmar habzik a szam, hogy ennyire bena vagyok -.-'

Tud nekem ebben valaki segiteni, tippet adni?

Elore is nagyon koszonom.

SAP kezdő

Sziasztok!

Most ismerkedem az SAP-val végfelhasználói oldalon. Interneten próbáltam rákeresni a problémámra, de mivel ahogy látom, az SAP egy elég összetett rendszer, ez így nem fog menni egyik napról a másikra.

Jelenleg SAP Gui-val kellene adattáblákat lementeni, lényegében mindig ugyanazokat és Accessbe tenni. Kézzel elég macerás a dolog, meg szerintem a hibafaktor is magasabb így. Egyrészt kezd körvonalazódni néhány lehetőség, de ezeket elég lassú végigpróbálgatni, és közben derül ki általában, hogy mire van jogosultságom.

Szeretnék tanácsot kérni, hogy mivel lenne célszerű ezt a feladatot megoldani, amihez lehet jogosultásgom, vagy van esélyem kérni.

köszi
TJ

Oracle exp

Kaptam egy 9.2.0.8.0 adatbázist, amiről szeretném az adatbázist kiexportálni.
Viszont csak 10.x kliensem van linux 64 bit.
Ezzel sajnos nem megy az exp.

Tudna valaki segíteni, hogy honnan tudok letölteni 9.x linux 64 bit klienst, vagy van valami megoldás hogy a 10.x-et használjam, bár ez utóbbira nem találtam megoldást.

MySQL ERROR 1051: Unknown table

MySQL workbench szerint az adatbázisban 229 tábla van. A PHPMyAdmin szerint is 229, de csak 175 táblát listáz.

Ha lekérdeznéka táblából, akkor
Error Code: 1146. Table 'project.jos_kunena_config' doesn't exist

Ha törölni, akkor
ERROR 1051: Unknown table 'jos_kunena_config'

>mysqlcheck --database project -u root -p
Error : Table 'project.jos_kunena_config' doesn't exist
error : Corrupt

Van ötlet arra, hogyan tudnám rendbe tenni ezt az adatbázist?

Tábla kinyerése SQL dumpból

Sziasztok!

Egy táblát szeretnék kinyerni egy nagy SQL dumpból. Idáig jutottam, de a $2-t a második parancs valamiért nem eszi meg. Van valakinek tippje?


#!/bin/sh

# Használat
# tabla-ki dumpfajl-neve tablanev

sed -n -e '/-- Host: localhost Database:/,/-- Host: localhost Database:/p' $1 > $2.sql
sed -n -e '/-- Table structure for table `$2`/,/-- Table structure for table/p' $1 >> $2.sql

Postgres lassú lekérdezés

Kedves Fórumozók!

Adott a következő struktúrájú Postgres adatbázis táblám:

CREATE TABLE sensor_result
(
id serial NOT NULL,
sensor_id integer NOT NULL,
date integer NOT NULL DEFAULT (date_part('epoch'::text, now()))::integer,
status boolean NOT NULL,
interrupt boolean NOT NULL,
request_time real,
CONSTRAINT "PK_sensorresultid" PRIMARY KEY (id),
CONSTRAINT "FK_sensorid" FOREIGN KEY (sensor_id)
REFERENCES sensors (id) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE CASCADE
);

Ebbe a táblába percenként kerül be közel 700 mérő műszer mérési eredménye, melyek méréseit 1 évig kell megőrizni.
Innen már csak egy gyors fejszámolás és kijön, hogy ~367.920.000 bejegyzést fog tartalmazni a tábla élesítéstől számított 1 éven belül.

A problémám az, hogy a mérési eredményekből különböző kimutatásokat kéne készítenem. A kimutatásokat sajnos van, hogy több különböző adatból kell összeállítanom, ami több különböző lekérdezést jelent. Összevonogatni az eredményeket nem lehet, mert a request_time adat külön-külön is fontos.

Tesztelés képpen feltöltöttem a táblát ~5 millió adattal. És itt ért a meglepetés.
Egy egyszerű: SELECT count(1) FROM sensor_result; lekérdezés is átlag 1600ms volt a lekérdezés ideje.
Ha egy WHERE záradékot is beleteszek pl: WHERE sensor_id=1, akkor további 200ms-el nőtt a lekérdezés ideje.Tekintettel arra, hogy esetenként 3-4 lekérdezést is le kell futtatnom (ami nem feltétlenül ilyen egyszerű) és nem 5millió adat lesz a táblában, hanem 300 millió, így ez elfogadhatatlan mértékű válaszidőt eredményezne.
Várható lekérdezések: date mezőben tárolt dátum (unix timestamp) szerint meghatározott intervallum esetén a request_time átlaga, szintén meghatározott intervallum esetén a mérések száma, abból azok száma, ahol a status=true, vagy éppen false, ugyan így az interrupt mezőre is.

Van valakinek valami ötlete arra, hogy mit tudnék tenni a lekérdezések gyorsítása érdekében? Akár az adatbázis átalakítása is szóba jöhet, mert még nem került élesítésre a rendszer. Sajnos egy dolog nem megoldható: adatbázis váltás, maximum postgreshez hasonló licenselésű alternatív adatbázis kezelőre.

Előre is köszönöm mindenkinek az építő jellegű hozzászólást.
Köszönettel:
NoMan

több azonosító kinyerése egyetlen egy stringből

Sziasztok!

Szerintetek miként lehet a legelegánsabb módon megoldani az alábbi szituációt?

TableA.oszlopB-ben, egy stringbe van összefűzve a "bum=" utáni értéken a releváns adat, ami alapján össze tudnám joinolni a táblákat.A stringbe ágyazott adatok száma változó.

További nehezítés, hogy Access-ben kellene megvalósítani, így jópár finomságról le kell mondani.
TableA
+--oszlopA---+---oszlopB----------------------------------------------------+
| value1 | bim=2,bam=ahamm,bum=1;bim=56,bam=n,bum=2;
| value1 | bim=23,bam=invalid,bum=3;
| value2 | bim=12,bam=pron,bum=1;bim=44,bam=y,bum=2;bim=67,bam=y,bum=3;
| value3 | bim=67,bam=y,bum=2;
+---------------------------------------------------------------------------
TableB
+--oszlopC---+---oszlopB---+
| valueA | 2 |
| valueC | 1 |
| valueB | 3 |
| valueD | 2 |
+--------------------------+
TableEredmény
+--oszlopA--+--oszlopC---+---oszlopB---+
+-----------+------------+-------------+
A TableA normális esetben így nézne ki:
+--oszlopA---+---oszlopB--+
| value1 | 1 |
| value1 | 2 |
| value1 | 3 |
| value2 | 1 |
| value2 | 2 |
| value2 | 3 |
| value3 | 2 |
+-------------------------+

táblák kivonása (MySQL)

Sziasztok!

Adott egy 90.000 és egy 30.000 rekordos tábla, mindkettőben 4, max. 30 karakteres szöveges mező található.
Két mező vizsgálata alapján kellene a kisebb rekordos táblát a nagyobból kivonnom.

Hogyan tudnám ezt a legoptimálisabban megtenni?
(bontsam fel kisebb táblákra a kivonandót?)

Üdv:
Cseresznye