Autor | Zpráva | ||
---|---|---|---|
ann Profil * |
#1 · Zasláno: 30. 5. 2014, 16:48:49
Zdravím
zkouším si udělat z zájmu učení jak by mohl vypadat asi tak script na level a expy v php zatím to je ok,ale mám tu jeden problém kterej už opravdu nevím v db mám users (tam mám aktualní kolik má zkušeností(exp)) exp(tam mám vypsaný lvl->exp) takže tam mám lvl exp 1 500 2 700 3 900 4 1300 Do lvl 3 mě to všechno jde,ale pokud si nastavím expu víc jak 1000 tak mě to vypíše že mám lvl 1. jak je to možný? Script má vlastně jenom porovnávat. pokud mám expu 500 tak si v tabulce exp najde sloupec exp,a porovná ho že bud se rovná nebo je menší. potom vypíšu jen kolik má lvl kterej je ve stejným řádku jako porovnaný exp (ID,LVL,EXP) script je tady $query = DB::queryOne('SELECT * FROM users INNER JOIN exp ON users.exp >= exp.exp WHERE users.username = ?',array($name));//name je proměnná kde mám jméno v db return $query ; |
||
Micruss Profil |
#2 · Zasláno: 30. 5. 2014, 18:06:45
Zkoušel jsi tam přihodit do Where exp.lvl = (user-level)...?
|
||
juriad Profil |
Je to z důvodu toho, že dotaz vrací víc řádků v náhodném pořádí a občas to prostě vyjde.
Dotaz byl blbě, zkusím to ještě jednou v [#5]. Můžeš si poddotazem najít největší level takový, že je na něj třeba méně expů; takový bude maximálně jeden. |
||
ann Profil * |
#4 · Zasláno: 30. 5. 2014, 19:18:32 · Upravil/a: ann
juriad:
Zdravím,díky za raekci. Nějak jsem nepochopil váš script. co znamená l.level? to má být z databáze exp lvl? a proč nakonci left join je jednička? nebo co je efektivnější? nechat tam jen expy,a v php pak pomocí podmínek podle expu vyhodnocovat level?nebo je to tak jak to mám ted přes db lepší? co jsem koukal na netu tak tam to většina dělá přes podmínky dle expu uložených v databázi... |
||
juriad Profil |
ann:
O efektivitu se nestarej. Nebudeš mít tolik uživatelů, aby na výkonu záleželo a až je budeš mít, tak budeš mít prostředky celou aplikaci přepsat pořádně. Klidně bych tu informaci nechal v databázi, ale provedl bych změny: - tabulku exp přejmenovat na levels - změnit logiku záznamů - číslo u levelu znamená minimalní nutný počet expů Tedy tabulka bude vypadat: levels: lvl exp 1 0 2 500 3 700 4 900 5 1300 Pak je vlastně úloha: najdi maximální číslo takového levelu, že počet expů, které má uživatel je menší nebo rovno. Pokud bys měl jen podmínku na nerovnost, měl by uživatel level třeba 3, ale i 2 a 1. Tedy chceš nejvyšší takový. SELECT MAX(lvl) AS level FROM levels WHERE exp <= $user_exp 0 1 ).
OK? Teď to propojit s uživatelem. Ukázka na http://sqlfiddle.com/#!2/bf2545/7. Přidáš ten předchozí dotaz jako poddotaz (do závorek). Pozor na to, že tento dotaz není úplně vhodný na výpis velkého množství uživatelů (to se pak řeší trochu jinak). |
||
ann Profil * |
#6 · Zasláno: 30. 5. 2014, 20:09:16
juriad:
jasný,už to chápu.. ps: já to nemám tak že bych opravdu chtěl dělat hru,já to mám opravdu jen pro učení,jelikož se momentálně doučuju klasický php a začínám s oop tak se chci trochu posunout i na jiné věci :) Jinač děkuju moc za radu a vysvětlení,pomohlo. |
||
Časová prodleva: 10 let
|
0