Autor | Zpráva | ||
---|---|---|---|
Watchick Profil |
#1 · Zasláno: 15. 4. 2009, 20:03:39
Zdravím, mám SQL dotaz:
SELECT idpole FROM budovy WHERE iductu='1' AND (SELECT drevo FROM typybudov WHERE lvl=budovy.lvl AND id=budovy.typ)<'182' AND (SELECT hlina FROM typybudov WHERE lvl=budovy.lvl AND id=budovy.typ)<'51' AND (SELECT zelezo FROM typybudov WHERE lvl=budovy.lvl AND id=budovy.typ)<'80' AND (SELECT obili FROM typybudov WHERE lvl=budovy.lvl AND id=budovy.typ)<'219' AND typ='4' ORDER BY lvl ASC LIMIT 1 jde prakticky o to že v tabulce budovy mám "stavební políčka" 1-20 a u každého údaje mám napsáno, na jakém levelu a jaký typ budovy to je. v typybudovy mám napsány obecné informace, kolik čeho stojí vylepšení na každý level.... tento dotaz úspěšně vybere budovu, na kterou mám suroviny, abych jí mohl postavit/vylepšit. (jsou 4 suroviny, drevo, hlina, zelezo a obilí), stejně tak mám 4 typy budov... doly na kazdou z techto surovin... a potřeboval bych do tohoto příkazu přidat " že když mám větší produkci dreva, tak vylepšit hlínu, přestože by byla hlína nejdříve, podle"lvl ASC", a třeba, vždy, že by stačilo dát reprezentaci, co preferuji nejvíce, a co nejméně, tedy (drevo-obili)=(1-4), tedy ze preferuji 2,4,1,3. Jde to nějak, nebo se musí vybrat všechny budovy, které připadají v úvahu, a pak mezi nimi ještě vybrat? Doufám, že jsem to podal co nejsrozumitelněji, děkuji Watchick |
||
TomášK Profil |
#2 · Zasláno: 15. 4. 2009, 22:15:56 · Upravil/a: TomášK
Pár poznámek:
* ne každý má tři monitory, aby se mu tam celý dotaz vešel naráz. Takhle je de facto nečitelný a člověk si ho musí zkopírovat do editoru a zalomit řádky, aby z toho něco měl. To určitě nenaláká respondenty. * čísla do uvozovek nepatří, sice to většinou funguje, ale třeba výraz '100' < '20' označí mysql jako pravdivý. Jednou se můžeš spálit... * mrkni na join, dokáže ten dotaz dost zjednodušit, nemluvě o tom, že to bude řádově rychlejší, což ale na těch při těch pár záznamech asi není tak důležité. * jestli máš v kódu opravdu ty čísla jako 182,51, tak je dej do nějakých konstant, ať je vidět, co to je (množství surovin, které hráč má?) Dotaz s použitím joinu (měl by dávat totožné výsledky, pokud se nepletu): SELECT idpole FROM budovy JOIN typbudov ON typbudov.lvl=budovy.lvl AND typbudovy.id=budovy.typ WHERE iductu = 1 AND drevo < 182 AND hlina < 51 AND zelezo < 80 AND obili < 219 AND typ = 4 ORDER BY lvl ASC LIMIT 1; A co se týče samotného dotazu: rozumím, že máš budovu, která ma určitý typ. Není mi jasné, co je produkce a jak zjistit, jak velkou má hráč produkci. Není mi jasný pojem "vylepšit hlínu" - chápu, že jde vylepšit budova, ale nedává mi smysl vylepešní suroviny. Co znamená, že "hlína byla nejdříve"? Myslím, že to z toho dostat půjde, když se doberem toho, co chceš dostat. |
||
Watchick Profil |
#3 · Zasláno: 16. 4. 2009, 06:42:55 · Upravil/a: Watchick
Zdravím, mám SQL dotaz:
$ve_skladu_dreva = 182; $ve_skladu_hliny = 51; $ve_skladu_zeleza = 80; $ve_skladu_obili = 219; SELECT idpole FROM budovy WHERE iductu='1' AND (SELECT drevo FROM typybudov WHERE lvl=budovy.lvl AND id=budovy.typ)<=$ve_skladu_dreva AND (SELECT hlina FROM typybudov WHERE lvl=budovy.lvl AND id=budovy.typ)<=$ve_skladu_hliny AND (SELECT zelezo FROM typybudov WHERE lvl=budovy.lvl AND id=budovy.typ)<=$ve_skladu_zeleza AND (SELECT obili FROM typybudov WHERE lvl=budovy.lvl AND id=budovy.typ)<=$ve_skladu_obili AND ORDER BY lvl ASC LIMIT 1 Omlouvám se, ten "typ = '4'" by tam pouze mátlo, tak jsem ho odstranil... /to je tam jen taková pojista, aby nebylo příliš málo obilí, a zrovna kdyz jsem prikaz kopiroval, tak k tomu doslo/ Jde o to, že jsou takováto (výdělečná surovinová pole): (to číslo u každého z nich je ID pole) a tyto pole se mohou vylepšovat a vylepšovat, a s každým vylepšením vám přibívá více surovin/hodinu tedy je třeba možné, abych měl příjmy: dřevo: 50/hodinu (což je v budovach "typ" 1, a v typech budov je to "id") hlína: 60/hodinu(což je v budovach "typ" 2, a v typech budov je to "id") Železo: 30/hodinu(což je v budovach "typ" 3, a v typech budov je to "id") obilí: 100/hodinu(což je v budovach "typ" 4, a v typech budov je to "id") Ve skladech jsou suroviny vytěžené(pokud v 00:00 mám s takovýmito příjmy sklady prázdné, tak v 02:30 budou sklady na hodnotách: 125,150,75,250) TomášK Díky že sis udělal práci :) |
||
Časová prodleva: 3 dny
|
|||
Watchick Profil |
#4 · Zasláno: 19. 4. 2009, 17:12:23
Taže to asi nakonec mám udělat tak, že si je vypíšu všechny a pak v php vyberu ten nejlepší, že? :D
|
||
Časová prodleva: 15 let
|
0