- Megjelent a Red Magic kompakt OLED kijelzős gaming táblagépe
- Nvidia GPU-k jövője - amit tudni vélünk
- ThinkPad (NEM IdeaPad)
- Hobby elektronika
- Milyen házat vegyek?
- Milyen notebookot vegyek?
- Vezetékes FEJhallgatók
- Kezdő fotósok digitális fényképei
- HiFi műszaki szemmel - sztereó hangrendszerek
- AMD K6-III, és minden ami RETRO - Oldschool tuning
Új hozzászólás Aktív témák
-
bambano
titán
válasz
NeoPampalini #5494 üzenetére
az lehet a gondod, hogy a karakterek tárolási mérete változik.
ezért ha blob mezőben substr-t csinálsz, elvileg előfordulhat, hogy ketté vág egy karaktert, ami két bájton tárolódik. nem tudom, hogy az oracle ezt hogy intézi, php-ben futottam bele ilyenbe.
olyan substr függvényre lenne szükséged, ami tisztában van az utf8-cal.lehet, hogy a blobot először utf8-as text-té kellene konvertálnod, és utána substr-rel vágni a szükségest.
-
NeoPampalini
senior tag
Oracle SQL jöhet ide? Van általános Oracle totyik, de oda két éve nem írt senki.
Szóval, én még csak ismerkedek ezzel, és nem értem, mi a nyűgje, a hibaüzenet nem segít (legalábbis nekem).
Szerk.: lemaradt, hogy mindez Oracle SQL Developer-ben van elkövetve.
Van egy db, amiben szerepelnek megjegyzés szövegek, ezek BLOB-ként vannak tárolva, agyrém azt már látom.
Ez lefut:
utl_raw.cast_to_varchar2(dbms_lob.substr(BLOB_MEZŐ))
viszont itt az ékezetes karakterek helyett "egyéb" karakterek vannak, mint pl. Š, meg az A mindenféle formája. Olvashatatlan így.
Ha úgy csinálom, hogy:
convert((utl_raw.cast_to_varchar2(dbms_lob.substr(BLOB_MEZŐ))), 'EE8ISO8859P2', 'AL32UTF8')
akkor valamelyik mezőnél elhasal "ORA-12703: this character set conversion is not supported".
Ezt én értem, de honnan tudnám meg, hogy PONTOSAN mi a fene baja van? Nem mindegyik mezőre csinálja ezt, random belenéztem a db-be pár darabbal, ott működött a konverzió.
-
baracsi
tag
Szóval nekem nincs két táblám
Nincs jelentősége annak, hogy bizonylatokból veszi az ember az adatokat vagy egy készletmozgás-történet táblából. Ezért kell valamilyen procedurális megoldás, hogy fel tudd dolgozni az adatokat.
Én úgy csináltam, hogy a függvény csinál 2 temp táblát fifo_bevet_vt és fifo_eladas_vt, az egyikbe legyűjtőm a bevételezéseket (leltárt és gyártást is figyel, de az jelen esetben lényegtelen és még egyszer mondom mindegy, hogy honnan vesszük az adatokat, bizonylat vagy mozgástörténet), a másikba az eladásokat adott termékre, mindkét tábla dátum, db és ár mezőket tartalmaz. Az adatok legyűjtése után elkezdem bejárni az eladásokat dátum szerint sorba rendezve majd veszem a mennyiségét és nézek hozzá egy bevétet, itt is mindig a legkisebb dátumú rekordokat figyelem és maximum az eladás mennyiségével csökkentem a fifo_bevet_vt db adatát (már ha van rajta annyi, mert ha nincs, akkor nulla lesz és nézem a következő bevét rekordot). Ha egy fifo_bevet_vt rekord mennyiség elfogy, akkor törlöm. Miután az eladásokat teljesen bejártam és elfogyasztottam a bevét rekordokat, a bevétes táblában csak azok a tételek maradnak, amelyek még nem lettek eladva a saját mennyiségével és árával és ebből már kiszámítható a FIFO átlagár.
A termék FIFO ára pedig egy egyszerű select-tel lekérhető
SELECT get_FIFO_ar(tkod) FROM cikk WHERE ...
Ezért mondom hogy ezt simán SQL-lel elég macerás megcsinálni.
A te esetedben bevét oldalra a 100-as kód a nyitókészlet, az mindenképpen kell, és kellenek hozzá 101-199 mozgások, eladás oldalra pedig mehetnek az eladások és igen, ha nincs olyan táblád, (pl. leltár), ami megmondja, hogy január elsején (vagy tetszőleges dátumra) adott termékre mennyi volt a FIFO ár akkor minden esetben az elejétől kell venni mindent. Ezért jó ha leltározás funkció van a programodban, mert akkor elég csak onnan nézni a bizonylatokat (leltár [mennyiség, ár] és leltár utáni bevétek, eladások) feltételezve azt, hogy a leltárban FIFO árral vannak letárolva az adatok.
-
pch
senior tag
válasz
baracsi #5491 üzenetére
Igen. Abban a strukturában amit kialakítottam abban nem tudom lemodellezni.
De levázolom nagyvonalakba.
Minden egy táblázatban van. Van a mozgas tábla. Benne mozgáskód mennyiség érték.
Ha a mozgáskód 101-199 akkor bevét. Ha 201-299 kiadás. Ha 100 akkor nyitó készlet.
Szóval ha 100-akkor onnantól kell számolni az adott cikk FIFO-ját. Ha ebben a táblába nincs 100-as akkor értelemszerűen ugye az első 101-199 mozgáskódtól kell számolni a beszerzési oldalt. Kiadási oldalon (gondolom, de ezt meg kellene erősíteni) az elejétől kell számolni. (Vagy ott is a 100-astól?)
Szóval nekem nincs két táblám. Amiket néztem sql utasítást/függvényt az mindegyik külön táblázatból számolgatott. Sőtt ott nincs is ilyen, hogy nyitó tétel. -
baracsi
tag
De mi a kérdés, tehát akkor a FIFO működését érted, de nem tudod lemodellezni a működését? Szerintem csak simán nem fogod tudni SQL-lel megoldani, én legalábbis MySQL függvénnyel oldottam meg, mert a beszerzéseket szépen el kell fogyasztgatnod az eladások alapján, és ami marad készlet és beszerzési ár, abból kell meghatározni a FIFO-átlagárat.
-
pch
senior tag
Üdv!
FIFO számításba tud valaki segíteni? (Akár term.nem ingyen)
Ami nálam a bonyolultság, hogy:
Minden mozgás egy táblába van vezetve. Van olyan mozgás amitől számolni kell és van olyan mikor az elejétől az egészet.
Szóval amiket eddig néztem fifo példakódokat, vagy nem bírtam már értelmezni vagy nem működtek megfelelően...Köszi!
-
-
RedHarlow
aktív tag
Sziasztok, automatizálni szeretnék egy job-ot. Van egy SQL-em amiben minden hónap első napján át kell írnom a dátumokat az előző hónap első illetve utolsó napjára, hogy az egész előző előző hónapot vizsgálja a lekérdezés. Tudnátok segíteni abban, hogy ezt hogy szép megoldani úgy hogy ne kelljen írkálni a jövőben? Jelenelg így néz ki ez a rész az SQL-ben:
and trunc (syscreationdate) >= to_date('20220401','YYYYMMDD') --ezt atirni
and trunc (syscreationdate) <= to_date('20220431','YYYYMMDD'
Előre is köszönöm a segítséget!
-
Taci
addikt
Szia!
A W3Schools oldalát ajánlom (ebben, és más témakörben is), tökéletes kezdőknek, magyarázattal, gyakorlattal, ellenőrző feladatokkal.
-
grün
csendes tag
van olyan SQL tanulási segédlet, amivel kifejezetten pozitív tapasztalatotok van?
- teljesen a nulláról indulok
- cél: alapokat lerakni, lekérdezésekben haladni
- videó előnyben (könyv is lehet)
- magyar előnyben (angol nem kizáró)
- fizetős is lehet, ha annyival többet ad és jobban strukturáltkettőt magyar videósorozatot találtam
[SanFranciscoból Jöttem]
Szüts Bálint csatorna -
evko
aktív tag
Sziasztok, újra.
Szóval...
Van egy tanár, egy tantárgy és 1 megtartott tábla.
Miután az admin feltöltötte az adatokat a tanár és a tantárgy táblákba, azt kellene elérni, hogy a megtartott táblába hozzá tudjon rendelni 1 tanárhoz tartozó órákat... De pl. 1 matek és fizika órát adó tanárhoz ne lehessen hozzárendelni magyar órát... Csak azokat az órákat, amiket ő tarthat.
Ehhez elég ez a 3 tábla, vagy szükség van még plusz táblára, és hogy lehetne ezt megoldani? -
martonx
veterán
Felejtsd el az Asp.Net Webformst! Vedd úgy, hogy nincs olyan, hogy gridview.
A tutorial videókat rühellem, de itt van a hivatalos doksi: Tutorial: Get started with EF Core in an ASP.NET MVC web app | Microsoft Docs -
evko
aktív tag
Köszönöm a tippeket.
Most tanulmányozom az SQL injection "rejtelmeit", jó tudni erről is. Sajnos hirtelen ez a videó jött fel, alatta nem olvastam rém történeteket, de legalább tudom, nagyon figyelni kell.Neked is felteszem a kérdést... Tudnál nekem esetleg valami linket küldeni, ahol net.asp-ben normálisan meg van oldva egy insert, update, vagy bármi parancs?
Jó éjt!
-
martonx
veterán
Ez mégis mi a f....sz?
Ez a youtube videó annyi sebből vérzik. Asp.Net Webforms 2022-ben???
Kézzel megírt SQL parancsok 2022-ben????
És mindehhez a zseniális indiai akcentus. Régi szép emlékeket idéz, amikor együtt dolgoztunk indiaiakkal, és nap, mint nap a röhögéstől sírva meséltük a programozós horror sztorikat egymásnak a cégnél a kollégákkal. Bár akkor ezt megélni inkább tragikus volt, mára szép és kitörölhetetlen emlékké halványult -
tm5
tag
válasz
Apollo17hu #5468 üzenetére
Ez talán még jobb, csak annyi kéne még hozzá, hogy adnék egy "minimum rank" értéket a t2 táblához és a query végén ahhoz hasonlítanám a match_rate-et és akkor tovább csökkennne a false pozitiv:
select t1.*, tt.kategoria
from t1
left join
(
select t.*, RANK() OVER(PARTITION BY t.id ORDER BY t.match_rate desc) AS rnum
from
(
select
t1.id
,t2.kategoria
,
(case when ifnull(t1.m1,'*') != ifnull(t2.m1,'*') then 0 when ifnull(t1.m1,'*') = ifnull(t2.m1,'%') then 1 else 0 end) +
(case when ifnull(t1.m2,'*') != ifnull(t2.m2,'*') then 0 when ifnull(t1.m2,'*') = ifnull(t2.m2,'%') then 1 else 0 end) +
(case when ifnull(t1.m3,'*') != ifnull(t2.m3,'*') then 0 when ifnull(t1.m3,'*') = ifnull(t2.m3,'%') then 1 else 0 end) +
(case when ifnull(t1.m4,'*') != ifnull(t2.m4,'*') then 0 when ifnull(t1.m4,'*') = ifnull(t2.m4,'%') then 1 else 0 end) +
(case when ifnull(t1.m5,'*') != ifnull(t2.m5,'*') then 0 when ifnull(t1.m5,'*') = ifnull(t2.m5,'%') then 1 else 0 end) +
(case when ifnull(t1.m6,'*') != ifnull(t2.m6,'*') then 0 when ifnull(t1.m6,'*') = ifnull(t2.m6,'%') then 1 else 0 end) +
(case when ifnull(t1.m7,'*') != ifnull(t2.m7,'*') then 0 when ifnull(t1.m7,'*') = ifnull(t2.m7,'%') then 1 else 0 end) +
(case when ifnull(t1.m8,'*') != ifnull(t2.m8,'*') then 0 when ifnull(t1.m8,'*') = ifnull(t2.m8,'%') then 1 else 0 end) as match_rate
, t1.m1
, t1.m2
, t1.m3
, t1.m4
, t1.m5
, t1.m6
, t1.m7
, t1.m8
from t1 join t2
--order by 1,3 desc;
) t
) tt on t1.id = tt.id and tt.rnum = 1 and tt.match_rate > 0 -
tm5
tag
válasz
Apollo17hu #5468 üzenetére
Hát én valamni ilyesmivel indítanék:
select t.*, ROW_NUMBER() OVER(PARTITION BY t.id ORDER BY t.match_rate desc) AS row_num2
from
(select
t1.id
,t2.kategoria
,
(case when ifnull(t1.m1,'*') != ifnull(t2.m1,'%') then -100 when ifnull(t1.m1,'*') = ifnull(t2.m1,'%') then 1 else 0 end) +
(case when ifnull(t1.m2,'*') != ifnull(t2.m2,'%') then -100 when ifnull(t1.m2,'*') = ifnull(t2.m2,'%') then 1 else 0 end) +
(case when ifnull(t1.m3,'*') != ifnull(t2.m3,'%') then -100 when ifnull(t1.m3,'*') = ifnull(t2.m3,'%') then 1 else 0 end) +
(case when ifnull(t1.m4,'*') != ifnull(t2.m4,'%') then -100 when ifnull(t1.m4,'*') = ifnull(t2.m4,'%') then 1 else 0 end) +
(case when ifnull(t1.m5,'*') != ifnull(t2.m5,'%') then -100 when ifnull(t1.m5,'*') = ifnull(t2.m5,'%') then 1 else 0 end) +
(case when ifnull(t1.m6,'*') != ifnull(t2.m6,'%') then -100 when ifnull(t1.m6,'*') = ifnull(t2.m6,'%') then 1 else 0 end) +
(case when ifnull(t1.m7,'*') != ifnull(t2.m7,'%') then -100 when ifnull(t1.m7,'*') = ifnull(t2.m7,'%') then 1 else 0 end) +
(case when ifnull(t1.m8,'*') != ifnull(t2.m8,'%') then -100 when ifnull(t1.m8,'*') = ifnull(t2.m8,'%') then 1 else 0 end) as match_rate
, t1.m1
, t1.m2
, t1.m3
, t1.m4
, t1.m5
, t1.m6
, t1.m7
, t1.m8
from t1 join t2
--order by 1,3 desc;
) t
de e kőré még kell valami ilyesmi:select t1.*, tt.kategoria
from t1
left join
(
-- ide jon az elozo query
) tt on t1.id = tt.id and tt.rnum = 1 and tt.match_rate != -800
De ez még nem tökéletes. Van benne néhány fal pozitív kategória.Azért szedtem ketté, mert azzal a belső queryvel még kell játszani és finomhangolni a match_rate-et
Jah és remélem nem olyan sok rekord van egyik táblában sem, mert azért a descartes szorzat befigyel rendesen.
-
tm5
tag
Na hát ez egy gyönyörű példa az SQL Injection exploit implementálására.
Szóval ilyet nem szaban csinálni, Indián kivül ezt valszeg mindenütt tudják.SQL tananyag magyarul. Az UPDATE szóra rákeresve találsz példákat magyarázattal.
SQL UPDATE C#-ban paraméterekkel -
evko
aktív tag
Sziasztok!
Mivel sql lekérdezés (bár c# is egyben), ide jöttem első körben...
Van egy update parancs... Videó alapján próbáltam megcsnálni. De most elakadtam...
Itt a videó linkje, ha lenne valakinek 3 perce:
https://www.youtube.com/watch?v=pH7E-GM8HjE&t=1474sPl 24:14 perctől is látszódik a kód...
Engem csak az update sor érdekelne... És a where záradék... Vajon mi lehet ott?Találtam 1 ilyet...
String updatedata = "Update lecturedetail set attendance='" + markstatus + "' where rollno=" + rollno;
Ez nem jó, nyilván átírva sem...
Bocsánat, nem értek hozzá és szeretném megérteni.Szép délutánt!
-
tm5
tag
válasz
Apollo17hu #5464 üzenetére
Tegyük fel, hogy T2-ben ez van:
('Bela', null, 'Bela',null,null,null,...)
('Cecil', null, ,null,'Cecil',null,null,...)
T1-ben:
(1234, 'Aladar', 'Bela', 'Cecil',null,null,...)
Ez most Bela vagy Cecil lesz a defaulting szabály alapján, ha nincs kategória a T2-ben erre a hármas kombinációra? -
Apollo17hu
őstag
-
tm5
tag
válasz
Apollo17hu #5462 üzenetére
A kategoria kötődik az m1..mn mezők sorrendjéhez?
Pl: insert into t2 (kategoria, m1, m2, m3, m4, m5, m6, m7, m8) values ('BelaElemer', NULL, 'Bela', NULL, NULL, 'Elemer', NULL, NULL, NULL);
itt pl.a kategória értéke más lenne, ha m6=Bela és m3=Elemer?
Akkor is "BelaElemer" ha m1=Bela és m2="Elemer"?
És lehetne még 1000 hasonló kérdésem a kategória képzéssel... -
Apollo17hu
őstag
Sziasztok!
Van egy problémám, amire csak favágó megoldásom van, de érdekelne, hogy megoldható-e elegáns(abb)an.
Van egy tény tábla (t1), ami tartalmaz egy egyedi azonosítót (id), és további attribútum mezőket (m1, m2, m3 stb.).
Van egy dimenzió tábla (t2), ami a tény tábla rekordjainak besorolására szolgál. Ebben a dimenzió táblában megvan az összes attribútum mező (m1, m2, m3 stb.), ami t1-ben is szerepel, de itt id helyett egy ún. kategoria mező van. A kategoria mező szintén egyedi. Úgy áll elő, hogy a rekordon lévő attribútum mezőket egyszerűen konkatenáljuk.A feladat az, hogy t1 összes sorát meg kell nézni, hova kategorizálódik t2 szerint. A probléma ott kezdődik, hogy az attribútum mezők mindkét táblában hol töltöttek, hol nem (NULL). Értelemszerűen, ha t2-ben töltetlen egy attribútum, akkor az a kategorizálás szempontjából irreleváns (vagyis t1-ben bármit tartalmaz az attribútum, a rekord kötni fog t2-vel). ...és ott folytatódik, hogyha t2-ben bizonyos sorok "tartalmazzák" a másikat, akkor a szűkebb halmaz priorizált.
Például, ha az alábbi két rekord szerepel t2-ben:
m1 = NULL; m2 = 'Bela'; kategoria = Bela
m1 = 'Aladar'; m2 = 'Bela'; kategoria = AladarBela...akkor t1-ben az alábbi rekord:
id = 1; m1 = 'Aladar'; m2 = 'Bela'
az 'AladarBela' kategóriát fogja megkapni, mert ugyan 'Bela' kategória is érvényes lenne rá, de 'AladarBela' szűkebb halmazt képvisel (mert nem mindegy, mi kerül az m1 attribútumba).
Ha t1-ben ez a rekord lenne:
id = 2; m1 = 'Alfonz'; m2 = 'Bela'
...akkor a 'Bela' kategóriát kapná.
Látszik, hogy a kategorizálás egyértelmű, de nekem nem jut eszembe egyszerűbb megoldás annál, minthogy létrehozzak egy olyan CASE WHEN-t, aminek az ágainak számossága egyezik a t2 táblában lévő rekordok számosságával. És ez azért is gáz így, mert ha t2 bővül/módosul, akkor a CASE WHEN-t is bővíteni/módosítani kell.
DB Fiddle-ben készítettem két mintatáblát, ha vkit érdekel a problémafelvetés.
Köszi!
-
Taci
addikt
Szerintem ne privátban kérj segítséget. Ez a fórum egyik előnye, hogy a te problémád másnál is előjöhet, és akkor egy kereséssel a választ is megtalálja. Szóval szerintem írd be ide a kérdésedet.
A második kérdésedre pedig a válasz az SQL Fiddle vagy a DB Fiddle. (De lehet, ajánlanak majd mást is.)
-
evko
aktív tag
Sziasztok!
Egy feladat alapján néhány sql táblát létre kell hoznom, egy programhoz.
Van, aki esetleg privátban tudna segíteni, ha Megadom a paramétereket? Csak elméleti síkon lenne szükség segítségre és nem 0-ról, inkább hiba javításról lenne szó.Más... Online hol ajánlott táblákat létrehozni tesztelés céljára? Ahol ugye többen tudjuk tesztelni...
Köszönöm.
-
nyunyu
félisten
2 hete jött szembe ennek a durvább verziója: összes ügyfél összes szerződését kellett kötés dátuma szerint csökkenőben beszámoznom, hogy kiderüljön mit kell és mit nem szabad darálni az irattárból, hogy 4 év késéssel megfeleljünk a GDPRnak.
(Még élő ügyfél legfrissebb szerződésén vannak az aktuális adatai, régebbi szerződései darálhatóak csak.)Probléma csak annyi volt, hogy a személy-kapcsoló-szerződés táblák mindegyikének van egy GDPR törlés logja is, így 6 tábla összes létező kombinációját kellett végigsakkoznom.
(hülye jogszabályok miatt ezek eltérő időben törlendőek!)Aztán jól megfeküdt a szerver a sokmilliós táblák keresztül-kasul joinjaitól, így bonthattam 3 felé a feladatot, élő személyek élő szerződései, élő személyek törölt szerződései, törölt személyek törölt szerződései.
Majd a 3 darabban előállított adathalmazra uszítottam rá a row_number() over (partition by person_id order by create_date desc)-et. -
nyunyu
félisten
Felaggregálod a T2-T3 és T4-T5 párosok maximumát szamla_id-kra, aztán azok közül veszed a nagyobbat?
SELECT T1.szamla_id,
T1.vevo_id,
T1.esedekes,
T1.brutto,
case when A.datum is null then B.datum
when B.datum is null then A.datum
when A.datum > B.datum then A.datum
else B.datum
end fizetve
FROM T1
LEFT JOIN (SELECT T3.szamla_id, MAX(T2.datum) datum
FROM T3
JOIN T2
ON T2.id = T3.fej_id
GROUP BY T3.szamla_id) A
ON A.szamla_id = T1.szamla_id
LEFT JOIN (SELECT T5.szamla_id, MAX(T4.datum) datum
FROM T5
JOIN T4
ON T4.id = T5.fej_id
GROUP BY t5.szamla_id) B
ON B.szamla_id = T1.szamla_id
WHERE T1.vevo_id = 'vevőazonosító'; -
pch
senior tag
Üdv!
Az alábbit kellene megoldanom, de nem jövök rá a nyitjára..
Van egy tábla benne a számla alap adatok (nevezzük T1, mezők: szamla_is, vevo_id, kelte, tejlesites, esedekes, brutto)
Van további két táblakapcsolat. Mindkettő ugyanaz így egyet írok le:
(fejléc legyen T2, mezők: id, datum törzs legyen T3, mezők: id, fej_id, szamla_id, osszeg)
Értelemszerűen a másik tábla is ugyanez:
(fejléc legyen T4, mezők: id, datum törzs legyen T5, mezők: id, fej_id, szamla_id, osszeg)Mivel a két utóbbi táblába szerepelHET a számla_id így union-al összefűzve (ha kézzel beírom az id-t le tudom kérni a legnagyobb dátumot:
SELECT max(datum) as fizetve FROM (
(SELECT T2.datum FROM T2, T3 WHERE T2.id=T3.fej_id AND szamla_id='keresett számla')
UNION
(SELECT T4.datum FROM T4, T5 WHERE T4.id=T5.fej_id AND szamla_id='keresett számla')
)
Így kapok egy fizetve dátumot ami ugye megegyezik azzal amit keresek.
Viszont amit szeretnék, hogy ez a fizetve dátum szerepeljen a számla lekérdezés eredményébe.Azaz
SELECT T1.szamla_id,T1.vevo_id,T1.esedekes,T1.brutto (ide jönne a fizetve lekérés ami a keresett számla szöveg helyett a T1.szamla_id-t kellene tartalmaznia )
FROM T1 WHERE T1.vevo_id='vevőazonosító'Remélem érthetően fogalmaztam...
Szóval az összes UNION módot és SELECT módot már megpróbáltam...
Van rá lehetőség? Mert ugye php alatt foreach-ba árgyazott lekéréssel meg lehet kerülni, de ugye az ahány számla annyi adatkapocslat lenne a fizetve dátum miatt. Ami nem jó..Köszönöm!
-
-
Prog-Szerv
csendes tag
Kicsit agyaltam rajta, így az van amit említettél is, sajnos ez kiszelektálja azokat a projekteket is amikben van 0 hour érték is és annál nagyobb is:
SELECT COUNT(DISTINCT project_id) FROM join_project_task JOIN project ON project.id = join_project_task.project_id WHERE project.elements > 0 AND join_project_task.hours > 0Ez úgy tűnik működik, csak azokat szelektálja amikben csak 0 hour értékű task van:
SELECT COUNT(DISTINCT project_id) FROM join_project_task JOIN project ON project.id = join_project_task.project_id WHERE project.elements > 0 AND join_project_task.hours = 0Próbáltam beépíteni a not in operátort de erre 0 értéket kapok vissza:
SELECT COUNT(DISTINCT project_id) FROM join_project_task JOIN project ON project.id = join_project_task.project_id WHERE project.elements > 0 AND project.id NOT IN (SELECT project_id FROM join_project_task WHERE hours = 0) -
Prog-Szerv
csendes tag
Kezdem kapizsgálni....az a baj hogy nekem nem a task táblában tárolódik az hour -ra vonatkozó adat és mivel ez egy elég masszív program nem szeretném ezt a részét átalakítani, mert akkor egy csomó másik helyen módosítanom kellene a kódot
Szóval az hour a "join_project_task" táblán belül van. Leegyszerűsítve csak arra ami nekünk most itt kell:
"project" tábla tartalma: id
"task" tábla tartalma: id, name
"join_project_task" tartalma: project_id, task_id, hoursAz hours értéke változhat, nem fix, tehát előfordulhat hogy például egy szerelés 4 óra de lehet hogy csak 2, ezért van így tárolva. Ez olyasmi mint egy digitális jelenléti ív, tehát változhat hogy 1-1 feladat mennyi idő alatt készül el, utólag kerül beírásra.
-
nyunyu
félisten
válasz
Prog-Szerv #5446 üzenetére
Klasszikusan így számolod össze az órákat az összes projektre:
select p.id, p.name, sum(pt.hour) sum_hour
from project p
join project_task pt
on pt.p_id = p.id
group by p.id, p.name;(task tábla tartalma nem ad többlet infót a feladathoz, így azt nem joinoltam feleslegesen a többihez.)
A még nem befejezett projektek kivágására az nem jó, ha beteszel egy where pt.hour>0 feltételt, mert attól még a befejezett részfeladatokat össze fogja adni.
Helyette a komplett project id-t kell kiszűrni, amihez van olyan bejegyzés, ahol a hour = 0:
select p.id, p.name, sum(pt.hour) sum_hour
from project p
join project_task pt
on pt.p_id = p.id
where p.id not in (select p_id from project_task where hour = 0)
group by p.id, p.name;Hány project van, ami teljesen befejeződött?
select count(distinct p.id)
from project p
join project_task pt
on pt.p_id = p.id
where p.id not in (select p_id from project_task where hour = 0);Ide nem kell a fenti group by, mivel most az összes rekordot akarod összeszámolni, és nem projektenként külön-külön.
-
Prog-Szerv
csendes tag
Sziasztok!
Kis segítséget szeretnék kérni.
MySQL-en belül adott 3 db adattábla: project, task, join_project_task Értelem szerűen a join tábla köti össze a task táblában felsorolt feladatokat a projektekkel és a projekt táblán belül szerepelnek a projektek alapadatai. Namost a join táblán belül ugye szerepel a project_id, task_id és egy hour oszlop ami arra szolgál, hogy ide kerül be az az információ INT formában hogy az adott projekthez tartozó adott feladatot mennyi időbe telt elvégezni. A kérdés
hogyan tudnám összeszámolni mondjuk egy sum-al hogy hány darab olyan projektem van ahol a projekthez tartozó összes feladat el lett végezve tehát az hour oszlop mindenütt > 0
Példa:ezt ne countolja:
p_id=1 task_id=1 hour =1
p_id=1 task_id=2 hour =0ezt viszont igen:
p_id=2 task_id=1 hour =1
p_id=2 task_id=2 hour =2és ezt is:
p_id=3 task_id=2 hour =4
p_id=3 task_id=3 hour =3így a végeredmény a példa alapján: 2
Illetve azt hogyan tudom megoldani hogy számolja össze az hour értékeit de csak azoknál a projekteknél ahol mindegyik > 0 ?
Remélem nem bonyolítottam túl a leírást. -
wmarci
senior tag
válasz
martonx #5443 üzenetére
Sziasztok!
Adott egy SQL adatbazisban egy tabla, ahol az elso oszlop az ID (INT), illetve van meg 10 masik oszlop varos nevekkel, a cella ertekek itt 1-100ig terjedo random szamok (km).
1. Hogyan tudok egy bizonyos ID-ra ugy raszurni, hogy az 5 legnagyobb erteku oszlop (legtobb km) ASC sorrendben legyen. (Horizontal sorting?)
2.Kivalasztani azt a recordot a tablabol, amelyik a legtobb cellat tartalmazza, aminel >= 50 az ertek?Huh, remelem ertheto, ahogy megfogalmaztam ezt.
Koszi a segitseget elore is!
-
Taci
addikt
válasz
sztanozs #5441 üzenetére
Köszönöm, hogy rászántad az időt és ezt ilyen részletesen leírtad, de valószínűleg akkor rosszul (túlbonyolítva) tettem fel a kérdést, mert (bár pár új részletet megtudtam, köszönet érte, de) nem erre irányult a kérdésem, ez a része tiszta.
Ezt írta bambano: az a megoldás, ha a link a saját webjére mutat és redirectel a célra.
Én pedig azt szeretném megérteni, hogy miért jobb egy ilyen módszert kifejleszteni (ennél a példánál maradva: rd aldomain, átirányítás saját aldomain-ről a külső linkre) ahelyett, ahogy pl. tegnap a tesztszerveren megcsináltam, hogy simán csak megnyitja a külső linket (href), mellé meg fut egy szkript (onclick), ami szerver oldalon realizálódik és tárolja az összes adatot ami szükséges. Miért kell hogy saját szerverre mutasson a link, és onnan legyen az átirányítás a külső linkre?
@martonx: Köszönöm.
-
sztanozs
veterán
A 3xx-as HTTP kódoknál nincs konkrét tartalom (mintha csak a HTTP headert kérnéd le) és a Location header mezőben van az URL (abszolút, vagy relatív), ahova a böngészőnek tovább kell dobnia a teljes eredeti kérést. Persze az egyéb header mezőket is fel kell dolgozni (pl SetCookie, de ez a kliensen futó kód szempontjából ireleváns).
Amennyiben pl az általad említett példában az ID alapján is továbbít és nem kell a query, az lehet valami régi logika maradéka, vagy lehet benne plusz infó is, amit pl a redirect során a szerver eltárol (pl referrer link).
A konkrét esetben így néz ki egy kliens-szerver kommunikáció:
1) kliens "betölti" az alábbi oldalt:
https://rd.hirkereso.hu/rd/39891270?place=6544&partner=hirkereso&url=https%3A%2F%2Fprohardver.hu%2Fhir%2Fjon_lg_elso_hibrid_projektora.html
2) "rd.hirkereso.hu" megkapja a kérést és betölti a logikát, ami a "/rd/39891270" path feldolgozásáért felel
3) a betöltött logika megkapja az eredeti kérést a query elemekkel együtt:
/rd/39891270?place=6544&partner=hirkereso&url=https%3A%2F%2Fprohardver.hu%2Fhir%2Fjon_lg_elso_hibrid_projektora.html
4) eltárolja az adatbázisba a megfelelő elemeket, timestamp-ot és betölti annak az oldalnak az URL-jét, ahova redirect-elni kell
5) a logika nem HTTP 200 választ ad, hanem HTTP 3xx-t és a Location headerbe beállítja a redirect URL-t: https://prohardver.hu/hir/jon_lg_elso_hibrid_projektora.html
6) kliens megkapja a 302-es üzenetet és a redirect URL-t: https://prohardver.hu/hir/jon_lg_elso_hibrid_projektora.html
7) a kliens elküldi a kérést redirected URL-nek:
https://prohardver.hu/hir/jon_lg_elso_hibrid_projektora.html
8) a "prohardver.hu" betölti a "hir/jon_lg_elso_hibrid_projektora.html" path feldolgozásához szükséges logikát
9) a betöltött logika legenerálja a felhasználó számára a tartalmat és egy HTTP 200 üzenetben elküldi a kliensnek
10) a klines megjeleníti a betöltött weboldalt (illetve letölti az oldalhoz szükséges többi erőforrást) -
martonx
veterán
Áhá így már értem. Bocs az elején félreértettelek. Mivel SQL-t használsz, jobb módja nincs. Más módok is vannak persze, pl. beüzemelsz egy külön NoSql-t ehhez, inmemory SQL táblát használsz, felhőben valami Queue-ba dobod be az eventeket, és majd onnan egy microservice a maga nyugijában updatelgeti a DB-t, stb...
-
Taci
addikt
válasz
sztanozs #5438 üzenetére
Én elhiszem, hogy a segítő szándék vezérelt (ahogy korábban is), de semmivel sem jutottabb előrébb egyik kérdéssel kapcsolatban sem azzal, hogy átolvastam pl. a Wikipédia cikket róla.
Nem is értem, mire írtad, max a 301 status code-nál lenne értelme, de ott pont nem volt semmi ilyen kérdésem, csak az eredeti fájlt nem tudtam elkapni, hogy amiről átirányít, az hogy néz ki - csak később curl-el.
Ebből egyik témára sem kapok választ, de még csak iránymutatást sem:
- "az a megoldás, ha a link a saját webjére mutat és redirectel a célra."
- "Google Analytics erre a megoldás, saját kókányolás helyett."
De így már ez tényleg teljesen offtopic ide. -
Taci
addikt
válasz
bambano #5436 üzenetére
Annyira szeretném érteni, amit írtok, de csak
fejek jönnek elő belőlem (meg rengeteg kérdés).
Google Analytics erre a megoldás, saját kókányolás helyett.
Szeretnék egy menüpontot, hogy pl. "Legolvasottabb cikkek". De az nem világos, hogy hogyan lehet jobb az Analytics-es adat, mint a saját szerveren tárolt. Vagy van rá mód, hogy direktben elérjem ezt az adatot (Google), és be tudja építeni egy query részeként? Tehát hogy pl. rendezze sorba a cikkeket aszerint, hányszor voltak megnyitva (aka. Legolvasottabb cikkek). Mert csak erre kellene.az a megoldás, ha a link a saját webjére mutat és redirectel a célra.
Ezt elmagyaráznád, kérlek, hogy miért jó? Szeretném megérteni, hogy aztán implementálni tudjam. (Ez offtopic ide, ezért rakom off-ba, de nagyon szeretném érteni.)
Így hirtelen ami eszembe jutott, hogy külső linkekkel operál az a hírkereső. Meg is néztem gyorsan, ott ez hogyan van megoldva.Egy példa (direkt nem alakítom linkké):
https://rd.hirkereso.hu/rd/39891270?place=6544&partner=hirkereso&url=https%3A%2F%2Fprohardver.hu%2Fhir%2Fjon_lg_elso_hibrid_projektora.htmlEz ide dob tovább:
https://prohardver.hu/hir/jon_lg_elso_hibrid_projektora.htmlMegköszönném, ha lenne annyi türelmed, hogy pár szóban elmagyarázod, hogy ez a link miért így épül fel. Pl. itt miért kell az "rd" aldomain? redirect, gondolom, de ez miért kell?
https://rd.hirkereso.hu/rd/39891270
Ez is ugyanoda továbbít, már a többi rész nélkül is. (és minden más cikkhez is van egy ilyen "redirect-id") Akkor miért kell a többi rész? Nem is igazán értem, bár ez gondolom a saját kódjához kell valamiért.És ennek a headerjében van a
Status Code: 301 (from disk cache)
location: https://prohardver.hu/hir/jon_lg_elso_hibrid_projektora.htmlViszont semmilyen forrásadatot nem látok, nem tudom, hogy továbbít.
Szóval talán az aldomain azért kellhet, mert ezekhez a külsős linkekhez csinált 1-1 saját linket a redirect aldomain-ban, és ezek a linkek 301-el továbbítják a valós cikkhez?
Ez plusz forgalmat generál neki? Vagy miért jó?Milyen rendszert kell építeni mögé? Mit kell hogy tudjon?
És miért jobb, ha így nyílik meg a link, mintsem a direkt link? Mi a célja, szerepe?
A startlap pl. a külsős linkeket simán csak belinkeli, nincs redirect. Akkor ők rosszul csinálják?Vagy ha nincs türelmed, kedved, természetesen azt is megértem, csak kérlek, ez esetben legalább a megfelelő keresőszavakkal segíts, hogy a megfelelő cikkeket találjam meg.
Egy általános "url redirect" sajnos nem mondja meg, hogy hogyan (és miért) kell saját weblapról saját weblapra átirányítva átirányítani. (Se másik jó pár keresés az utóbbi majd' 1 órában.)
Köszönöm.
-
Taci
addikt
válasz
martonx #5432 üzenetére
Nem saját link egyik sem, mind kifelé mutat, és 5 percenként jön pár 20-50-100 új.
Pl.:<a href="https://mobilarena.hu/tema/sql-kerdes/friss.html"
target="_blank" rel="noopener noreferrer">SQL kérdések</a>
Azt, hogy melyikre hányszor kattintanak, csak saját kódon belül tudom mérni. (Vagy nem tudom jól használni a Google toolját.
)
De akárhogy is, ott is ugyanaz lenne a helyzet a végén (Google adatbázisa), ott is van egy számláló egy rekordhoz, amit emelni kell.
Simán csak egy update?UPDATE clicks SET clicks_counter = clicks_counter + 1 WHERE link_id = 123
Vagy van ennek jobb módja is? Mert nem tudom, mennyire "jó" ha folyamatosan update van a táblán (még ha erre is van kitalálva).
-
Taci
addikt
Sziasztok!
Szeretném mérni, hogy egy-egy linkre az oldalamon mennyien kattintanak (és erre építve új menüpontokat létrehozni, tehát ezek a számok új query-khez kellenek majd).
Elsőre azt gondoltam ki, hogy minden linkhez
<a href
teszek egyonclick
eseményt, ami minden rákattintásnál (ellenőrzés után) beír majd egy ehhez létrehozott táblába: a link id-jához tartozó számlálót megemeli eggyel.
Tehát lenne egy clicks tábla, abban egy id, egy link_id és egy clicks_counter mező.
Kattintás, link_id = xyz, megnézi, ez benne van-e a clicks táblában, ha igen, akkorclicks_counter = clicks_counter + 1
.Van ennél egyszerűbb, szebb, jobb megoldás?
Csak azért kérdezem, mert az is eszembe jutott, mi van akkor, ha mondjuk 2 user pont ugyanakkor kattint ugyanarra a linkre. Mondjuk eddig 0 volt az értéke a counterének, megy egyszerre a 2 query, mindkettőnek azt mondja, hogy clicks_counter = 0, így mind a kettő 1-re fogja állítani. Vagy ezt okosan lekezeli az SQL?
Vagy máshogy kell ezt lekezelnem?Köszi a tippeket előre is.
-
DeFranco
nagyúr
Eljátszottam vele dummy adatokon és tényleg működött hárommal is, majd utána az éles lekérdezésben is amit nem értek, mert eddig éles táblákon "missing right parenthesis" hibát dobott, annak ellenére, hogy a forma biztosan (murphy nyilván, de ellenőriztem) jónak kellett legyen, mert egymás alá másoltam háromszor ugyanazt a blokkot, csak 3 különböző define által előírt paraméter változott.
Murphy törvénye, valamit nyilván benézhettem mégis, ez a megerősítés viszont átlendített, hogy működnie kellene, nincs limitáció (nem találtam róla semmit a neten, ezzel kezdtem a keresést). Köszi!
@nyunyu: Create table jogom nincs, csak lekérdezni (select) tudok. Próbáltam volna én is declare felé elindulni, kínomban már with-eltem elé egy táblát de persze egyik sem működött. Köszi a visszajelzést neked is.
-
nyunyu
félisten
válasz
DeFranco #5422 üzenetére
Sima ügy, anonim blokk elé írsz egy declaret:declare
v_valt1 number := 33;
v_valt2 number := 55;
begin
SELECT
table1.col1,
table1.col2 * v_valt1,
table1.col3 * v_valt2
FROM
table1;
end;Mégsem ilyen egyszerű, mert anonim blokkban nem lehet sima select (ahogy eljárás törzsben sem), várja az into táblanevet, hogy milyen táblába irányítsa a kimenetet.
Max úgy működhetne, hogy CTASt írsz a törzsbe:
declare
v_valt1 number := 33;
v_valt2 number := 55;
begin
CREATE TABLE new_table AS
SELECT
table1.col1,
table1.col2 * v_valt1,
table1.col3 * v_valt2
FROM
table1;
end;aztán miután lefutott, akkor le tudod kérdezni egy select * from new_table;-val az eredményt.
-
DeFranco
nagyúr
Sziasztok,
SQL developert használok, és van egy (szerintem egyszerű) probléma amit nem tudok megoldani. Autodidakta módon próbálok érvényesülni így lehet, hogy bőven hiányos a tudásom.
Szeretnék több (20-30) változót definiálni egy select előtt, amire a selecten belül hivatkozok. Minden változónak egy értéke van (lehet konstansnak kellene hívni, elnézést) a lényeg, hogy ezeket egy helyen lássam és tudjam módosítani a könnyebb követhetőség végett.
1-2 változóval még meg tudom csinálni hogy DEFINE paranncsal definiálom, de a harmadikra már elhasal.
Eddig így indítottam:
DEFINE valt1=33
DEFINE valt2=55
SELECT
table1.col1,
table1.col2*&valt1,
table1.col3*&valt2
FROM
table1Ami működik is, de 2-nél több DEFINE-nél "missing right parenthesis" hibaüzenetet kapok, pedig a szintaxis elvileg jó.
Hogy kell ezt szakszerűen összehozni? Érdekes módon erre nem találok példát google kereséssel sem.
-
Taci
addikt
Végig követtem egy mysql-bin tartalmát, és azt találtam, hogy valamiért az összes cron job-om összes tartalma, rekordonként megismételve szerepel benne...
Tehát ha a full backup és az inkrementális backup között 2000 rekord került be, akkor a mysql-bin-ben 2000-szer szerepel az összes cron job összes tartalma...
A teljes sztorihoz tartozik, hogy anno, amikor elkezdtem ezt az oldalt csinálni, még WordPress-szel kezdtem, és ahhoz raktam fel egy beépülőt (WP Crontrol). A WP már rég nincs használatban, azonban a mai napig ezzel készítettem a cron jobokat, mondván, erre a tesztkörnyezetre ez tökéletesen megfelel, és majd a szolgáltatónál kitapasztalom a normál cron jobok (CPanelből) létrehozását.
Lehetséges, hogy ez a plugin kavar be? Ilyen bejegyzések vannak tonnaszámra a mysql-bin fájlokban:
UPDATE `wp_options`
SET `option_value` = 'a:35:
{
i:1640350382;a:1:{s:17:\"crontrol_cron_job\ ...
i:1640350473;a:1:{s:17:\"crontrol_cron_job\ ...
i:1640350552;a:1:{s:17:\"crontrol_cron_job\ ...
stb. az összes cron job tartalma.
Aztán ez az egész rekordonként megismételve.Mivel ilyen tábla nem lesz (wp_options, hisz' ez WordPress-hez tartozik), gondolom, éles rendszerben (ahol WP a közelben sem lesz) ez a probléma már nem fog előjönni.
-
Taci
addikt
Azt hiszem, kezdem érteni.
FLUSH LOGS just closes and reopens log filesTehát nem rajta múlik, mi kerül a logokba. Ez csak lezárja az aktuális log fájlt, és nyit egy újat.
Valahol be kell állítanom, hogy ezekbe a logokba csak az adatbázist érintő bejegyzések legyenek elmentve (rekordok, táblák stb. módosításai, létrehozása stb.)
De ha már ezt így eddig összeraktam, hátha meglesz az is.
Persze ha valaki tudja a választ, kérem, írja meg.Bocsánat az előbbi regényért, de nagyon nem akart összeállni, és nem akartam fontos részletet kihagyni a "nyomozásból".
-
Taci
addikt
Az a nagyon-nagyon fura, hogy a mysql-bin fájlok tartalmazzák jó pár .php fájlok tartalmát.
Semmi közül az adatbázishoz, erre ott virít a tartalmuk a binary log fájlokban...Most fogtam egy 2,8 MB-os mysql-bin fájlt, megnyitottam Notepad++-szal, és csak felületesen, de kitöröltem belőle a php szkriptjeim tartalmát.
A végeredmény fájl mérete 13 kB. (Ezt gondolnám reális méretnek egy inkrementális mentésnél ennyi új adatra.)Én ezt nem értem. Mi történik itt?
-
Szmeby
tag
Akkor is a saját scriptek tartalmát látod benne, amikor 7 kilo és akkor is, amikor 7 mega? Nem hinném.
Mármint lehet, hogy azt látod, de bizonyára más is van mellette, különben miért is lenne 7 mega.Az adatbázisok nem csak nyers adatokat tárolnak, vannak benne indexek, dolgozik egy rakás átmeneti adattal, metaadattal, millióegy dologgal. Miért ne írná ki ezeket az adatokat is fájlba? Attól még lehet az ebből exportált script töredék méretű, a kettő szerintem nem zárja ki egymást.
(Amúgy semennyire sem értek az adatbázisok lelkivilágához, de számomra így logikus.)
-
Taci
addikt
válasz
martonx #5416 üzenetére
Utánanéztem, lehet-e natív eszközökkel inkrementális backupokat készíteni, és ezt a linket találtam: incremental-backup-using-mysqldump
MySQL, InnoDB, incremental backup
Akinek van tapasztalata ebben a témakörben, kérem, segítsen megérteni, mi és hogyan működik, mert egyszerűen nem áll össze.
Hosszú lesz, szóval csak ha van egy fölös 5 percetek így karácsony előtt, csak akkor álljatok neki.A fenti linken azt írják, kell előbb egy teljes backup, aztán ahhoz képest készül majd a "különbözet" (inkrementális backup).
Követtem a leírást, a példát, el is készülnek a fájlok, de nagyon sok kérdőjel van bennem. Próbáltam végig követni, mi és miért történik, de nem értem. Összeírtam magamnak időpontokkal, hogy mikor-mi történt a rendszerben:16:59
- összes létező log fájl (mysql-bin.0000xx) törlése (teszt szerver, csak hogy tiszta lappal induljak)
17:00
- full backup"mysqldump" . " --skip-extended-insert --complete-insert
--single-transaction --skip-lock-tables --flush-logs --master-data=2
--user=" . $username . " --password=" . $password . " " . $dbname .
" > " . $backup_folder . $backup_filename_sql;
- létrejött: backup-20211222-1700.sql (65 MB, benne minden adat)
- létrejött: mysql-bin.000001 (1 kB)
17:02
- szerver leállítása
17:03
- szerver indítása (csak hogy lássam, mi történik ilyenkor a mysql-bin fájlokkal)
- létrejött: mysql-bin.000002 (1 kB)
- módosult: mysql-bin.000001 (nagyobb lett - 769 kB)
- kérdés: Mi íródott bele, és miért ekkor?
17:04
- módosult: mysql-bin.000002 (nagyobb lett - 770 kB)
- kérdés: Mi íródott bele, és miért ekkor?
17:10
- Adatok folyamatosan kerülnek az adatbázisba, de a 01 és 02 fájlok nem változnak.
17:20
- A 01 és 02 fájlok továbbra sem módosultak.
- kérdés: A 01, 02 stb. fájlokban a saját szkriptjeim tartalmát látom. Miért?
- kérdés: ib_logfile0, ib_logfile1 stb. Ezek milyen fájlok? 262.144 kB méretűek...
17:21
- módosult: mysql-bin.000002 (nagyobb lett - 7.212 kB)
- kérdés: Miért? Mi került bele, és miért pont most?
- kérdés: 7 MB-os fájl 20 perc után? Az előző 3 hónap teljes adatbázisa 65 MB körül van... Akkor ez mi?
22:25
- semmi változás, pedig folyamatosan kerültek be új rekordok az elmúlt 4 órában
22:27
- incremental backup"mysqladmin" . " --user=" . $username .
" --password=" . $password . " flush-logs";
- létrejött: mysql-bin.000003 (1 kB)
- módosult: mysql-bin.000002 (nagyobb lett - 106.819 kB)
- kérdés: 107 MB? 4 órányi adat után? 65 MB a full backup 3 hónap után...
22.39
- módosult: ib_logfile0 és ib_logfile1, de a méretük az előzőekhez képest nem változott (262.144 kB), csak a fájl időbélyegzője.
- kérdés: Ezek milyen fájlok? Mi változott bennük, ha a méretük változatlan maradt?
- módosult: az ibdata1 fájl is friss időbélyegzős lett
22.41
- módosult: ib_logfile0, ib_logfile1 és ibdata1 időbélyegzője
Úgy látszik, ez a 3 fájl szinkronban frissül (legalábbis az időbélyegzők).A full backup-hoz találtam még egy "--delete-master-logs" kapcsolót is, de az csak talán egy 1 kB körüli fájlt csinált, amiben nem volt érdemi adat, szóval azt nem is használtam.
Szóval amiket nem értek:
- 20 perc után csinált egy 7 MB-os differenciál fájlt. De az előző 3 hónap összes rekordja elfér 65 MB-ban. Akkor mi kerül 7 MB-ba 20 perc után?
- Akármelyik fájlba nézek bele (mysql-bin.0000xx), a saját szkriptjeim "tartalmát" látom. Nagyon fura. Semmilyen adat a rekordokból, csak a szkriptjeim sorai...
- A link alatt ezt írja: And we only need to save mysql-bin.000002, because it contains all changes we done after our full backup. Ebből én azt értettem (amit írt is), hogy a mysql-bin.0000xx fájlok tartalmazzák a full backup óta történt változásokat, így a fő backup mellé ezeket kell majd lementeni. De akkor a rekordokat kellene tartalmaznia, nem a szkriptjeim "kivonatát"...Valami nálam csúszik nagyon félre? Nem értem ezt az egészet.
Úgy indultam neki, hogy full backup - töltés felhőbeli tárhelyre. Aztán inkrementális backup, kis fájlok, mennek szintén felhőbe. Aztán majd valamikor (csak példa, mondjuk hetente) újra 1 full backup, és a hét hátralévő részében inkrementális, kis fájlok.
De egyrészt ezek az inkrementális fájlok hatalmas fájlok (ahhoz képest, hogy max pár 100 rekordot tartalmaznak elvileg), másrészt, a tartalmukat sem értem.Rosszul hívom meg a full- és inkrementális backupolást? Rossz fájlokat vizsgálok?
Mit rontok el?Hátha valakinek van tapasztalata a témában. Már csak az utolsó lépés (backup) hiányzik ahhoz, hogy költözhessek (szolgáltatóhoz), de ez egyelőre nagyon nem áll össze.
Köszönöm előre is, ha két bejgli közt (vagy akár csak pezső után majd) van időtök ránézni.
-
martonx
veterán
Szerintem egy kicsit kevered a dolgokat. A backup nem erre való. Backupolni elég naponta egyszer (gondolj bele, amikor X TB-os DB-ket 2 óránként próbálna meg bárki menteni
) . Amire te gondolsz az inkább egyfajta tükrözés, amikor két DB-d van, és időnként a másikba átszinkronizálod az adatokat.
Illetve még olyat szoktak, hogy inkrementálisan backupolnak, így nem foglal annyi helyet. -
Taci
addikt
válasz
martonx #5414 üzenetére
Ez a 2 példa jó, köszönöm.
Viszont ugye ha esetleg programhiba rontotta el az adatokat, az nem jelenti, hogy csökkenni fog az adatbázis mérete. Tehát a vizsgálatom nem helyes (a régi fájlok törlésére vonatkozólag), legalábbis nem elég. Bár ezt az esetet (programhiba) úgyis csak utólag lehet észrevenni.Nem felhőben vagyok, és 5 percenként pár 100 rekord van mentve, így muszáj vagyok sűrűn backupolni. Legalább egy 2-3 órás periódusban gondolkodom. Aztán azért lenne fontos a megfelelő vizsgálat (arról, hogy nem-e egy sérült adatbázis-állaptot mentek le), mert arra gondoltam (és úgy csináltam meg), hogy másnap a legelső backupnál törli az előző napi backupokat, kivéve a legutolsót. Így a végén minden napról lesz egy valid mentésem.
De ez még sok kérdőjeles koncepció, bár minden eleme készen van már és működik, csak ahogy írtam is, arra alapoztam, hogy ha nagyobb a lementett adatbázis az előzőnél, akkor valid is. És ez így nem biztos.
-
martonx
veterán
Mondok egy nem is annyira extrém példát:
Amikor kézzel mókolsz a DB-ben, és te magad hibázol. Vagy ami még rosszabb, kiderül, hogy volt egy programhiba, ami elrontotta az adatokat.
Nem igazán értem, miért neked magadnak kell a backuppal bajlódnod. Jó mondjuk 8 éve csak felhőben dolgozok... -
Taci
addikt
Kérlek, segítsetek irányba állni a témában:
Úgy csináltam meg az adatbázis biztonsági mentését, hogy mivel nem tarthatok meg minden backupot, ezért a már feleseges(nek vélt) fájlokat egy idő (fájl darabszám) után nem tárolom tovább.
Mivel alapból abból indultam ki, hogy ha baj van az adatbázissal, akkor az elsősorban adatvesztést jelent, így akkor az előző mentéshez képest kisebb lesz a mentett (.sql) fájl. Ezért ha kisebb, nem menti, ha pedig nagyobb, akkor mentheti, tárolhatja, hisz' került bele új adat, ergo rendben az adatbázis. Ehhez mindig az előző mentés (tömörítés nélküli) fájlméretét veszi alapul.De most az ötlött belém, mi van, ha az adatbázis mérete nem csökken? Nem tudom, milyen eset lehet ez, de tegyük fel (extrém példa), az én oldalamat akarják a legtöbben feltörni, sikerül is, és teledobálják saját reklámokkal. Az adatbázis mérete így nőni fog. A szkriptem viszont jelenleg csak a méretnövekedésből veszi, hogy rendben van minden az új mentéssel, ami ebben az esetben hibás következtetés lenne, így a régi (még nem "meghekkelt") mentések potenciális automatikus törlés célpontjai lesznek, és a végén használható backup nélkül maradok.
Pontosan milyen esetekre kellene felkészítenem a biztonsái mentés mechanizmusát?
Mert úgy érzem, ha csak a fájlméretet nézem, már a fenti (oké, nem túl reális) példa alapján sem jó a vizsgálatom.Ott van ugye, ha a szolgáltatót támadják, vagy esetleg hardverhiba miatt ugrik minden adat. Erre ugye megoldás, ha felhőbe is mentek folyamatosan.
Milyen (akár reális, akár 1:1M-hoz esélyű) esetek vannak még, ahol a biztonsági mentés megléte "életet menthet"? Mert akkor úgy módosítom, mit vizsgáljon.
Köszi!
-
Ispy
nagyúr
SQL adatbázis schema verziókövetésre ki mit használ? Mi most a .net database projectjét TFS-el, de szeretnénk átrakni gitre a cuccot. Azure data studioval van esetleg valakinek tapasztalata, hogy mennyire megy jó benne mondjuk egy schema compare?
-
nyunyu
félisten
válasz
Apollo17hu #5407 üzenetére
Valami ilyesmire gondolsz?
select a.*, b.*, c.*
from a
full join b
on b.a_id = a.id
full join c
on c.id = b.c_id
where (a.id is not null and b.a_id is null) --A-hoz nincs B kapcsolat
or (c.id is not nll and b.c_is is null) --C-hez nincs B
or (b.a_id is not null and a.id is null and c.id is null); --B-hez nincs A, CMondjuk a B-hez nincs A, C rekordért egy rendes fejlesztőt seggbe kéne rúgni, hiszen pont ezért találták fel a foreign keyeket, hogy ne lehessen ilyet csinálni.
-
Apollo17hu
őstag
Sziasztok!
Oracle SQL-ben van 3 táblám: "A", "B" és "C". "A" és "C" között "B" kapcsolótáblaként funkcionál. Szeretném megnézni, hogy
- Vannak-e olyan rekordok, amelyek megtalálhatóak "A"-ban, de nincs hozzájuk kapcsolat "B"-ben?
- Vannak-e olyan rekordok, amelyek megtalálhatóak "C"-ben, de nincs hozzájuk kapcsolat "B"-ben?
- Vannak-e olyan kapcsolatok "B"-ben, amelyek sem "A", sem "C" egyik elemére sem mutatnak?Egyelőre arra jutottam, hogy először csinálok egy ilyet:
"A" FULL OUTER JOIN "B",
majd a kapott halmazhoz hasonló módon hozzácsapom "C"-t:
("A" FULL OUTER JOIN "B") FULL OUTER JOIN "C".
Van ennek a mókának elegánsabb módja? Olyasmire gondolok, hogy lehet-e 3 (vagy több) táblát egy lépésben FULL OUTER JOIN kapcsolni?
-
kw3v865
senior tag
Üdv!
PostgreSQL-hez keresek inkrementális backup megoldást. Létezik ilyen Windowsra?
-
nyugis21
kezdő
válasz
sztanozs #5371 üzenetére
Tudnál segíteni, hogyan lehet az ms weboldalán értelmesen keresni?
Az általad linkelt weboldalról kizárólag az "egyszerű keresés" weboldalra van link, és ha az alsó keresőbe írok be témát, vegyesen ad excel, share point és mindenféle mást.
Most két témára keresem a választ:
Az egyik a projektes példára vonatkozik, ez alapján látszik, hogy csak nagyon bonyolult, több táblás lekérdezéssel lehet adatot felvinni, ezt akarom megérteni, de a példában nem engedi, hogy megnézzem az sql kódot, és a weboldalon nem tudok továbblépni, illetve nincsen link másik weboldalra, ami az adatbevitelt elmagyarázná.A másik egy általános kérdés, a táblák közötti kapcsolatnál van három sor, az elsőt értelemszerűen be kell pipálni, ha két táblát összekapcsolok, de a másik kettő használata nem teljesen világos számomra. Úgy sejtem, akkor lehet belőlük probléma, ha adattörlésre kerül sor, és akkor rekurzívan törölnek másik táblákból is, de nem értem, hogyan és miért, és mi a különbség közöttük.
-
DeFranco
nagyúr
Sziasztok!
Van egy SQL (developer) lekérdezésem, viszonylag komplex, több lekérdezés UNION-nal összekapcsolva, majd a végén az egész fölé teszek egy selectet, ami alapesetben SELECT * és igény szerint aggregálom az belső rész eredményeit.
Az alábbi változókat kapom eredményként (SELECT *-ra):
[Azonosító] (példában 'Alma')
[Leíró változó1] (példában 'Piros')
[Leíró változó2] (példában 'Savanyú')
[Érték] (Példában '2')Az azonosító aszerint szerepel egyszer, vagy többször, hogy a 2 db [Leíró változó]-ból egy, vagy több érték kapcsolódik hozzá, példa:
Alma, Piros, Savanyú, 2
Alma, Zöld, Savanyú, 4
Alma, Zöld, Édes, 8
Körte, Zöld, Édes, 1
Körte, Barna, Édes, 10
Citrom, Sárga, Savanyú, 4Be kellene vezetnem egy olyan változót, ami aszerint vesz fel egy-egy konstans értéket (pl. "egyszer" és "többször"), hogy az egyes azonosítók egyszer, vagy többször szerepelnek a táblában, de nem jövök rá, hogyan kellene. Próbálkoztam CASE / COUNT megoldással de sehogy sem akart összejönni.
Elvárt eredménytábla:
Többször, Alma, Piros, Savanyú, 2
Többször, Alma, Zöld, Savanyú, 4
Többször, Alma, Zöld, Édes, 8
Többször, Körte, Zöld, Édes, 1
Többször, Körte, Barna, Édes, 10
Egyszer, Citrom, Sárga, Savanyú, 4Tudnátok segíteni, merre induljak el?
Új hozzászólás Aktív témák
Hirdetés
- Egy szenzor, két zoomkamera: újraírta a Huawei a mobilfotózás történetét
- PlayStation 5
- Parfüm topik
- BestBuy topik
- bitpork: Augusztus 2- szombat jelen állás szerint.
- Megjelent a Red Magic kompakt OLED kijelzős gaming táblagépe
- Nvidia GPU-k jövője - amit tudni vélünk
- Motoros topic
- ThinkPad (NEM IdeaPad)
- Kerékpárosok, bringások ide!
- További aktív témák...
- ÁRGARANCIA!Épített KomPhone i5 13400F 16/32/64GB RAM RX 7700 XT 12GB GAMER PC termékbeszámítással
- ÁRGARANCIA!Épített KomPhone i5 14600KF 32/64GB RAM RX 9070 16GB GAMER PC termékbeszámítással
- BESZÁMÍTÁS! Gigabyte B450M R5 5600X 16GB DDR4 512GB SSD RTX 3060 12GB Rampage SHIVA Seasonic 520W
- Lenovo Thunderbolt 3 kábel (4X90U90617)
- ÁRGARANCIA!Épített KomPhone i3 10105F 8/16/32GB RAM RX 6500 XT 4GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: CAMERA-PRO Hungary Kft
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest