Dočasná tabulka - Can't reopen table 'tb' – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Dočasná tabulka - Can't reopen table 'tb' – MySQL – Fórum – Programujte.comDočasná tabulka - Can't reopen table 'tb' – MySQL – Fórum – Programujte.com

 

21. 5. 2014   #1
-
0
-

   

select tb.cas, tb.popis, tb.id from tb
join
(select tb.cas, tb.popis, tb.id from tb where popis = 'pokus') as ts
 on tb.id between ts.id and ts.id + 1;

Tabulka tb obsahuje chronologicky seřazené záznamy, kde id (auto_incremet) odpovídá pořadí záznamu v tabulce. Pokud je tb dočasná tabulka, obdržím chybu Can't reopen table 'tb'. U "trvalé" tabulky se to nestane. Jde to u dočasné tabulky nějak obejít?

Cílem je vybrat všechny páry záznamů, kde první z páru splňuje podmínku popis = 'pokus' a druhý z páru je v čase následujícím za prvním.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
z
~ Anonymní uživatel
268 příspěvků
21. 5. 2014   #2
-
0
-

Nevím, jestli to s tím souvisí, ale nelíbí se mi ten subselect.

SELECT A.id AID, A.popis APOP, B.id BID, B.popis BPOP
FROM tb AS A
JOIN tb AS B
ON B.id BETWEEN A.id AND A.id+1
WHERE A.popis = 'druhy';
AID     APOP    BID     BPOP
2       druhy   2       druhy
2       druhy   3       treti
Nahlásit jako SPAM
IP: 88.101.8.–
22. 5. 2014   #3
-
0
-

Can't reopen table A

Jsem teď našel http://dev.mysql.com/doc/refman/5.0/en/temporary-table-problems.html   .  Zkusil jsem řešení, kde se id vloží do další dočasné tabulky a pak provede finální výběr.  Neohrabané a pomalé. 

hu

Nahlásit jako SPAM
IP: 195.178.67.–
22. 5. 2014   #4
-
0
-

Jestli by nebylo lepší mít samostatně tabulky názvů a poznámek se sloupci začátek, konec a text. Konec "neukončeného" období poznámky nebo názvu vyplňovat trigerem při vkládání začátku a textu nového.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
22. 5. 2014   #5
-
0
-

Narazil jsem na problém s vyplněním sloupce konec u nové tabulky jak jsem uvažoval výše. Triggery nemohou volat update na "své" tabulce.  Vkládání poznámek jde udělat uloženou procedurou - update na "neukončenou" událost a insert na novou.  Zkoušel jsem dvě tabulky - poznámka a konec poznámky - zde trigger funguje, ale nepovedlo se mi dostat do druhé tabulky správná data. Ukládat poznámku a název měření ke každé naměřené hodnotě - DB hodně "nakyne". Jak nejjednodušeji dostanu intervaly platnosti poznámek? Jedná se o celou koncepci vč. uspořádání tabulek.

hu

Nahlásit jako SPAM
IP: 188.95.60.–
Flowy0
Věrný člen
22. 5. 2014   #6
-
0
-

dizajn tabuliek by nemal byt ovplyvneny funkcnostou (aspon nie do takej miery ze vytvaras tabulky navyse) ... su ulohy ktore v sql nespravis (hlavne z oblasti DML) preto ma oracle plsql a inde musis upravovat data z databazy az na vyssej vrstve

Nahlásit jako SPAM
IP: 84.47.0.–
https://github.com/Flowy
z
~ Anonymní uživatel
268 příspěvků
23. 5. 2014   #7
-
0
-

Jestli to správně chápu, tak teda máš nějaká data vždy společná pro skupinu záznamů. Takže se nabízí to rozhodit do dvou tabulek a jen je propojit jedním sloupcem s ID toho k čemu patří.

Nahlásit jako SPAM
IP: 88.101.8.–
23. 5. 2014   #8
-
0
-

Úplně od základu: DB obsahuje 2 tabulky - naměřené teploty (datum + čas, teplota) a události (datum + čas, událost - obsahuje název události, popis - obsahuje doplňující data např. text poznámky). Doba platnosti názvu měření začíná datem a časem vložení názvu a končí datem a časem vložení nového názvu, totéž platí pro poznámku. Uživatel vybírá naměřené teploty pomocí filtrů období, název a poznámka. Jde tedy o vytvoření průniků a sjednocení intervalů - zobrazit data za:

1. období a platnost názvu a platnost poznámky
2. období a ( platnost názvu nebo platnost poznámky )
3. období a platnost názvu
4. období a platnost poznámky
5. období

Mezitím jsem zkusil zachovat tabulku událostí "se všímvšudy" a vyplňovat triggerem tabulku s poznámkami, kde má každá poznámka svůj interval - sloupce začátek, konec. Na rozdíl od uložené procedury to funguje bez problémů i při vkládání více událostí jedním insert (výhoda). Existence další tabulky s duplicitou záznamů je možná jen drobná nevýhoda. Pokud mi to výrazně zjednoduší tvorbu SQL dotazů, dalo by se s tím smířit.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Flowy0
Věrný člen
24. 5. 2014   #9
-
0
-

ake je prepojenie tych dvoch tabuliek? ak je to one-one s klucom na date (jedna ma primary a druha foreign idetifying) potom by si ich mal zlucit do jednej ... vytvarat id ak sa daju urcit casom je nezmysel ... mal by si radsej ukazat schemu alebo diagram databazy

ak som pochopil tie filtre tak tam ma byt moznost urcit obdobie v ktorom ma byt poznamka platna a zaroven text tej poznamky a nazvu? v tom pripade by uplne stacil jednoduchy select where start between obdobie and obdobie and nazov = nazov ... ak potrebujes len vysledky ktore su ukoncene v ramci obdobia tak sa to da cez subquery ... vytvarat stlpec koniec ak je pevne dany zaciatkom dalsieho by nebolo vhodne alebo aspon by si ho mal nadefinovat ako foreign key na nasledujuci zaznam (can be null)

Nahlásit jako SPAM
IP: 95.103.237.–
https://github.com/Flowy
24. 5. 2014   #10
-
0
-

Uživatel při měření si měření pojmenuje (název) a píše si poznámky v průběhu měření - může si tak během měření označit zajímavé místo, začátek další etapy měření apod. Systém měří a ukládá 1 hodnotu za sekundu. Měření běží nepřetržitě i několik dnů. Z tohoto důvodu nepoužívám nejjednodušší řešení - uložení názvu a poznámky do stejné tabulky jako naměřenou hodnotu (tabulka se sloupci datum+čas, hodnota, název, poznámka), protože by DB velice rychle nabírala na objemu. Název a poznámka jsou tedy  zaznamenávány do tabulky událostí se sloupci datum + čas (není unikátní, muže nastat více událostí současně), událost (změna názvu měření nebo poznámky, ztráta komunikace...), popis (text názvu měření nebo poznámky, periferie se kterou byla komunikace ztracena...), id (auto_incremet, primární klíč). Celý problém je v získání časových úseků platnosti názvu měření a platnosti poznámky z tabulky událostí a stanovení jejich sjednocení a průniků tak, aby uživatel dostal vyfiltrovaná data za požadovaná období. Dále je třeba vše provést na straně DB - uživatel bude zobrazovat data na vzdáleném počítači kde nemám možnost ovlivnit ani volbu použitého HW ani vlastnosti připojení k internetu (představ si "historický noťas" s průměrným GPRS).

Zatím se nadějně jeví řešení se třetí tabulkou názvů a poznámek vyplňovanou triggerem - vyplňování už mám funkční a intervaly jsou přímo v tabulce, na jejich získání by měl stačit jednoduchý select. Zde byly pokusy ukončeny spolu s koncem pracovní doby. 

hu

Nahlásit jako SPAM
IP: 188.95.60.–
27. 5. 2014   #11
-
0
-

Řešením byla drobná úprava uspořádání DB - přidání tabulky názvů a poznámek se sloupci začátek, konec, událost (název nebo pozn) a obsah (samotný text názvu nebo pozn) vyplňovanou triggerem.  Výběr časových úseků a následná filtrace dat jsou takto velice jednoduché a bez dočasných tabulek.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Flowy0
Věrný člen
30. 5. 2014   #12
-
0
-

ak das filtrovanie podla obdobia (napr mesiac) a do vysledku zahrnies len zaznamy ktore zacali a zaroven skoncili v danom mesiaci tak moze nastat problem ze ked budes chciet vytvorit tabulku vsetkych zaznamov a budes ich chciet zoskupovat podla mesiaca tak zaznamy ktore zacali v jednom mesiaci a skoncili v inom sa ti nezobrazia ... len aby si na to myslel ... osobne by som vobec nezaznamenaval koniec ak je priamo naviazany na zaciatok dalsieho zaznamu (redundancia) ... myslim ze prirodzenejsie je ak sa bude filtrovat len podla zaciatku zaznamu ... pre komplexnost pridat checker aby zobrazilo len zaznamy ktore koncia v danom obdoby

Nahlásit jako SPAM
IP: 91.148.1.–
https://github.com/Flowy
30. 5. 2014   #13
-
0
-

Pro ilustraci: Jirka bude mít dva vzorky označené A a B, Franta bude mít jiné vzorky označené C a D. Při měření se na zařízení prostřídají. Jirka si měření pojmenuje "Jirka A", pak příjde Franta s "měření C", hned na to udělá "měření D" a pak jirka zjistí, že je volno a udělá "Jirka B". V tabulce teplot mám průběh teploty v systému bez jakéhokoliv přerušení. Musím mít mechanismus, který vrátí naměřené hodnoty jednotlivých měření. K tomu (a nejen tomu) slouží tabulka událostí - do ní je zaznamenán nový název a datum a čas kdy k jeho změně došlo. Pokud Jirka bude chtít výsledky měření na vzorku A, musím mu vrátit hodnoty které systém naměřil od okamžiku vložení názvu "Jirka A" (začátek) až po okamžik vložení názvu "měření C" - tedy filtrovat podle začátku a konce. Při filtrování podle začátku mi to smatlá dohromady všechna 4 měření. 

Takto jednoduchý výběr by nestačil a tak je rozšířen o poznámku, která např. umožňuje vyčlenit dílčí části měření (ohřev, žíhání, chladnutí) a časový úsek od (datum + čas) do (datum + čas), takže jdou řešit situace "zapomněl jsem to pojmenovat, ale vím kdy jsem to měřil" nebo " nezdálo se mi, co jsem naměřil před měsícem tak jsem to zkusil znova".

Všechno je to dej hodnoty za časový úsek. Každý úsek má začátek a konec. Získání začátku časového úseku z tabulky událostí problém není, horší je to s koncem. Komplikuje se to tím, že úseků, kdy platí stejný název nebo poznámka může být několik. To by vedlo k výběru párů událostí jak jsem to v některém z předešlých příspěvků popsal a komplikovanému vkládání začátků a konců do podmínky v select. Proto "pomocná" tabulka vyplňovaná trigerem která obsahuje začátek a konec platnosti názvu a poznámky. Pak stačí jednoduše použít between začátek and konec, pomocí and a or lze pak určit průniky a sjednocení intervalů a vypsat požadovaná data. Zatím je to jediné proveditelné a funkční řešení které mám.

Nahlásit jako SPAM
IP: 195.178.67.–
Flowy0
Věrný člen
10. 6. 2014   #14
-
0
-

myslim ze ten prvy prispevok by ti fungoval keby si ku tb pridal synonymum ktorym ho budes volat a ten druhy pomenujes inak

Nahlásit jako SPAM
IP: 95.103.237.–
https://github.com/Flowy
11. 6. 2014   #15
-
0
-

aliasing tb nefunguje. Jde to udělat s pohledem, tam zase nesmí být parametry. Navíc pokud pak potřebuješ pohled s novými daty, musíš ten starý nejdříve odstranit a pak vytvářet nový.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

Podobná vlákna

Table — založil Onsi

TABLE JS — založil BoBy

JavaFX Table — založil William

Table or Div — založil WebDevelop

Promenna v CREATE TABLE — založil Rudolf

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý