[MySQL] Hodnota
Dobrý den, dělám na jednom prográmku pro jednu společnost, potřeboval bych poradit, učim se stim ( u toho ).
Používám k tomu Microsoft Visual Basic 2010 Express včerně MySQL pluginu.
Dim penizee As String = "SELECT penize FROM statistiky Where username='" & login.Text & "'"
Potřeboval bych vědět jak udělám aby se mi vypsala hodnota peněz, STAV.
Zkoušel jsem :
Dim penizee As String = "SELECT penize FROM statistiky Where username='" & login.Text & "' and penize='" & penize.Text) & "'"
To nahoře mi došlo že je hloupost, a teď se v tom motám.
Nepotřebuji aby se mi peníze doplnili, ale aby se mi vypsali.
Má to vyhledat v Kolonce 'statistiky' v statistíkách jsou uživatelská jména + peníze.
Uživatelské jméno doplní 'login.Text' ale teď potřebuju aby mi to vypsalo u uživatelského jména ty peníze " ty jsou v druhém sloupečku ".
Zkoušel jsem to hodnotou ToString ale zamotal jsem se dotoho natolik že nevim co dělám.
A co se ti nezdá na tom prvním dotazu? Teda kromě toho, že netušíš, co je SQL Injection.
Ja tam zadnou chybu "nevidim", je to naprosto neprustrelne. Priste az neco takoveho uvidis tak premyslej a dojdes k zaveru, ze tam nic takového "neni" a zeptas se na název toho programu jak vidim slovo penize a to SQL vim ze nechci nikoho upozornovat na chybu, radeji chci znat ten program vis jak ne..
Když vidím, jak spolupracuje na řešení, tak stejně ten program nebude nikdy funkční.
a co nám řiká historie? : Že přesto bude nasazen na produkci - true story bro.
Historie nám naopak říká, že spousta programů, přestože byly dokončené, nikdy v reálu pořádně nasazeno nebylo. Jeden čas se dokonce udávalo zhruba 75 - 90 %.
tak to zijeme oba uplně jinde, já vždycky byl ve firmě, kde to šlo do produkce s vesmírně dlouhým listem: "znamé bugy" a přesto se šlo go live. A taky byl muj bejvalej zaměstanavatel pokaždé v televizi, když jsme měli release
Dlouhý seznam bugů nezanamená, že by ten software byl horší než druhý, ale byl jenom lépe testovaný.
Poradil jsem si, nakonec to mělo být takhle :
Teď už jen potřebuji vědět jak to převést do labelu
Jedná se o Microsoft Visual Basic 2010 Express
(to je špatně)
Potřebuju teď nějak aby to přečetlo ten řádek a dosadilo do labelu.
Zatím máš jenom text dotazu. Takže se potřebuješ připojit k databázi, ten dotaz do ní poslat, přečíst výsledek a dosadit ho do labelu.
Připojení k databázi mam , ( úspěšně )
Ten dotaz do ní poslat (jak je to myšleno)
Přečíst výsledek a dosadit ( to je to co potřebuji )
Tak napiš celý kód. Těžko se můžeme napojit na něco, o čem nevíme, jak vypadá.
Proc je tam ten LIMIT? (ok, machrujete, protoze my v Oracle nic takového nemáme, ale dost bylo machrování v Oracle 12c v roce 2013 BUDE i autoinkrement ). Kdyz tam ma mit na loginu nějaký constraint, pokud neni a bude tam limit - tak to nespadne (a mělo by), ze je tam něco špatně nebo se useři pořežou mezi sebou. Vo pacnem pripade to potlaci obrovskou chybu.
Oracle nemá limit? A jak se dělá stránkování? Přes window funkce? Jinak samotný limit bez order by moc smysl nemá, výsledkem může být skoro cokoliv.
Nemá a bude mít. Snad víš "od" které stránky - máš k dispozici hinty a "target" - všechny řádky (podle velikosti ale dejmetomu fullscan pro celou tabulku) a hint ALL_ROWS a nebo (ty první tak rychle jak je to možné ASAP a podle indexu) a hint FIRST_ROWS a pak nějaké fetchování kolik vlastně záznamu chceš.
select * from tabulka order by sloupec_a; // seřadí všechny záznamy a vrátí až to bude celé hotové
select /*+ FIRST_ROWS */ from tabulka order by sloupec_a; // vyhodí asap seřazené řádky z indexu a bleje výsledek hned jak ho má. a ty si pak fetchnes kolik chces a zbytek uz po nem neches.
FIRST_ROWS -- psat nemusis, muze to byt na urovni session, ci databáz napsané, ze je to interaktivni aplikace a ze pozadujes vracet radky jak nejrychleji je to mozne. By default je to ALL_ROWS - pozadujes vsechny radky a je ti jedno kdy je dostanes, chces maximalni propustnost, to je optimalizační target pro oracle - pro warhouses a batche. Drive existoval FIRST_ROWS(n), kde n je poct radku, ktere chces optimalizovat pro interaktvni fetchovani, zbytek byl pro batch.
To bylo z pohledu nejakeho rozumneho behu, jinak limit taky zvládám:
tohle udělá select * from tabulka order by x limit 90,100
Zalezi na indexu, velikosti a co o tom vis. Odectem mnozin co jsem ukázal to taky zvládneš. Obecně si to muzes vynutit (nevim jak interně dělá LIMIT mysql) stejně jako to dělá mysql, tech moznosti jak dosáhnout výsledku LIMIT 90,100.
Ano výsledkem muže mít skoro cokoliv. Libi se mi tva věta, protože z ni plyne to co bych od Oracle čekal: NEDOVOLÍ KLAUZULI LIMIT POKUD NEBUDE ORDER BY. To bych od oracle totiž čekal. Ne jako agregační funkce, která nemá smysl a MYSQL ji povoluje, ačkoliv Oracle končí vybovou chybou: skupinová funkce, která neni jednskupinová (nebo tak nějak). MYSQL vrací chybný a náhodný výsledek.
Mně to říkat nemusíš, já MySQL nepoužívám. A moc nechápu její oblíbenost, když je v mnoha ohledech vyloženě špatná.