Pereiti prie turinio

MySql klausimėlis


Rekomenduojami pranešimai

Darau paprastą tekstinį php žaidimą ir susiduriau su problema. Man reikia padaryt tokį dalyką, sakykim iš lentelės paima reikšmę pagal dvi reikšmes, principas kaip excely. Sakykim konkretų atvejį - atstumai tarp miestų. Excely viskas aišku - horizontaliai ir vertikaliai miestų pavadinimai, eilučių ir stulpelių susikirtimas - atstumas tarp jų. Gal kas turit minčių, kaip padaryt tai mysql? Ir kitas dalykas, kaip ištraukti visą reikiamą info iš tos lentelės. Nors šitą punktą ir pats kaip nors sugalvočiau, jei turėčiau duomenis, bet jei kas darėt jau tokį dalyką, gal pasidalins patirtim :) . Ačiū :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na tai darai plokstuma su X ir Y koordinatem, tarkim zemalapis 500x500, kiekvienam objektui priskiri X ir Y koordinate, noredamas suzinoti atstuma tarp dvieju objektu, dara taip:(X1-X2) + (Y1 - Y2), ir gauni atstuma taip kaip ir ant excelio.

 

Aisku geriau butu iskart surasyti visas kooardinates i lentele ir priskirt objektus.. tarkim taip:

 

X Y OBJEKTO_ID

0 0

0 1

0 2

....

1 0

1 1

 

ir t.t. jeigu zemelapis 500x500 gausi 250 000 kooardinaciu t.y. 250 000 langeliu :)

 

Zodziu cia variantu daug, reik sukt galva, priklausio nuo zaidimo dydzio ir tipo, galima visko primastyti.

Redagavo n0l
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Hm paskaičius šitą, tai pradeda atrodyt man, kad mano "žaidimas" net negali būt vadinamas žaidimu :D . Bet vistiek ką nors reikia galvot :) . Šiaip man žemėlapio kaip tokio nereikia, man svarbu tik gaut į kintamąjį konkretų skaičių, t.y atsumą. Kol kas apsiriboju 3 miestais, t.y. objektais. Su tuo žemėlapiu, tai čia kaip matau galima superinius dalykus padaryt, bet man dar iki to laaabai toli :) . Su ta X Y lentele kažkokios mintys sukas galvoj, kaip padaryt paprasčiau lentelę, bet niekaip iki galo nesusigalvoja :D

 

Dabar galvoju, gal aš čia ne aiškiai pasakiau, ko noriu. Esme tokia, kad aš mysql lentelėj noriu turet duomenis su atstumais tarp miestų. Principas toks:

http://82.135.234.60/wp-content/uploads/2008/12/zuvu-suderinimo-lentele.jpg .

Tik lentelėj nesigaus ir stulpely ir elutėj miestų pavadinimų surašyt, tai vat kaip tokia info sukišt į lentelę? :) . Ir paskui iš tos pagal miestų pavadinimus gaut atstumą :) .

Redagavo mauzeris
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nu tai kaip minejau, X ir Y.

 

Kadangi matau miestai X ir Y asyse vienodi, tai abieju net nereikia surasyti, uzteks vienos asies.

 

ID pavadinimas

1 miestas_1

2 miestas_2

 

o kita lentele susirasai reisksmes

X Y reiksme

1 1 C

1 2 C

1 3 C

1 4 N

ir t.t.

 

is pirmos lenteles ID atitinka antros lenteles X arba Y, nes miestai tiek X tiek Y asyje vienodi.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nu prie ko tie X ir Y? :) vizualiai pasiulei teisinga sprendima, tiesiog pakeisk X ir Y i miesto ID'us ir viskas veikia kaip reikia. T.y. kiekvienai miesto porai - atstumas tarp ju.

 

EDIT: na dar karta perskaiciau tavo pranesima, tai realiai ta ir pats pasakei.. tiesiog tas X ir Y gan painiai atrode, nes siaip jau tuom zymimos koordinates, o ne objektai, kurie pagal uzdavini nepanasu jog sedetu kiekvienoj koordinatej. Anyway.. galejau ir nerasyt pranesimo :P

 

O autoriui - pries naudodamas SQL, bent paskaityk kas tai yra ir kaip veikia. Nekils tada tokie klausimai..

 

Nu tai kaip minejau, X ir Y.

 

Kadangi matau miestai X ir Y asyse vienodi, tai abieju net nereikia surasyti, uzteks vienos asies.

 

ID pavadinimas

1 miestas_1

2 miestas_2

 

o kita lentele susirasai reisksmes

X Y reiksme

1 1 C

1 2 C

1 3 C

1 4 N

ir t.t.

 

is pirmos lenteles ID atitinka antros lenteles X arba Y, nes miestai tiek X tiek Y asyje vienodi.

Redagavo dEVooX
Nuoroda į pranešimą
Dalintis kituose puslapiuose

O autoriui - pries naudodamas SQL, bent paskaityk kas tai yra ir kaip veikia. Nekils tada tokie klausimai..

 

Matai, kiekvienam tas "žinoti kas tai ir kaip veikia" atrodo kitaip :). Aš ne profesionalus programuotojas ir net ne IT studentas, šitas užsiėmimas man yra grinai smegenų manšta. Iki šiol man pakako to, ką žinau ir tai veikia, todėl negaliu sakyt, kad nesuprantu kas tai ir kaip tai veikia :) . Savaime suprantama, šitas dalykėlis praplėtė mano žinojimą ;) . Dar kartą ačiū.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Matai, kiekvienam tas "žinoti kas tai ir kaip veikia" atrodo kitaip :). Aš ne profesionalus programuotojas ir net ne IT studentas, šitas užsiėmimas man yra grinai smegenų manšta. Iki šiol man pakako to, ką žinau ir tai veikia, todėl negaliu sakyt, kad nesuprantu kas tai ir kaip tai veikia :) . Savaime suprantama, šitas dalykėlis praplėtė mano žinojimą ;) . Dar kartą ačiū.

 

Ka as norejau pasakyt, kad zinant pagrinda, kaip modeliuojamos SQL duomenu bazes, sios temos klausimas nebutu kiles. Ir tam nereikia but profesionalu.. Tik tiek.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sustojau vienoj, atrodo, labai paprastoj, bet niekaip negaliu rast, kur butu parašyta kame čia reikalas. Situacija tokia: ištraukiu is mysql masyvą su skaičiais nuo 0,1 iki 0,5, man reikia prie kiekvieno prideti po vienetą, kad gautųsi nuo 1,1 iki 1,5. Kai noriu atvaizduot tik ištrauktą skaičių, tai man rodo teisingai - 0,1-0,5 , bet jei pridedu vienetą, tai duoda 1 ir kažkur pasivogia tą 0,... :) . Gal kas kokių minčių? Ačiū :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sustojau vienoj, atrodo, labai paprastoj, bet niekaip negaliu rast, kur butu parašyta kame čia reikalas. Situacija tokia: ištraukiu is mysql masyvą su skaičiais nuo 0,1 iki 0,5, man reikia prie kiekvieno prideti po vienetą, kad gautųsi nuo 1,1 iki 1,5. Kai noriu atvaizduot tik ištrauktą skaičių, tai man rodo teisingai - 0,1-0,5 , bet jei pridedu vienetą, tai duoda 1 ir kažkur pasivogia tą 0,... :) . Gal kas kokių minčių? Ačiū :)

Manau galima su pačiu SQL kažką tokio padaryt

UPDATE table SET column = column+1

o su PHP tai toks įtarimas, kad kažkur tau jį į int paverčia... Parodyk kodą :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Manau galima su pačiu SQL kažką tokio padaryt

UPDATE table SET column = column+1

o su PHP tai toks įtarimas, kad kažkur tau jį į int paverčia... Parodyk kodą :)

 

Man reikia, kad iš db paimtu tą 0,... dalį ir prie jos pridėtu vienetą, nepakeičiant reikšmės mysql. Šiaip net nežinau, ką kopint, nes čia viskas padaryta paprastai: select viską iš lentelės ir prie $kint['koeficientas'] pridėt vienetą reikia. Kai atvaizduoju kintamąjį parodo koeficientą tokį, koks yra db, rašant

$pataisytas = $kint['koeficientas'] +1;

echo "". $pataisytas ."";

 

rodo tik 1, o ne pvz.: 1,3.

 

Edit: šitas stulpelis DB yra VARCHAR, todėl nežinau, iš kur čia galėtų INT atsirast :)

Redagavo mauzeris
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Man reikia, kad iš db paimtu tą 0,... dalį ir prie jos pridėtu vienetą, nepakeičiant reikšmės mysql. Šiaip net nežinau, ką kopint, nes čia viskas padaryta paprastai: select viską iš lentelės ir prie $kint['koeficientas'] pridėt vienetą reikia. Kai atvaizduoju kintamąjį parodo koeficientą tokį, koks yra db, rašant

$pataisytas = $kint['koeficientas'] +1;

echo "". $pataisytas ."";

 

rodo tik 1, o ne pvz.: 1,3.

 

Edit: šitas stulpelis DB yra VARCHAR, todėl nežinau, iš kur čia galėtų INT atsirast :)

O sakyk, kokio velnio laikyti skaičius VARCHAR laukelyje? Tam yra INT (sveikiems) ir FLOAT (trupmeniniams) Viskas aišku - tau atiduoda kaip string ir turbūt PHP paverčia ne į float, o į int, taigi gaunasi 0 (tas ištrauktas), pridedi 1 ir gaunasi 1 :) Na, čia mano teorija, bet bandyk keisti stulpelio tipą į FLOAT.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

O sakyk, kokio velnio laikyti skaičius VARCHAR laukelyje? Tam yra INT (sveikiems) ir FLOAT (trupmeniniams) Viskas aišku - tau atiduoda kaip string ir turbūt PHP paverčia ne į float, o į int, taigi gaunasi 0 (tas ištrauktas), pridedi 1 ir gaunasi 1 :) Na, čia mano teorija, bet bandyk keisti stulpelio tipą į FLOAT.

 

Pataisiau, bet vistiek tas pats. Kaip jau sakiau, man ištraukia koeficientą gerai:

 

$kint['koeficientas'];
echo "". $kint['koeficientas'] ."";

 

Atiduoda 0,3, o jau

 

$pataisytas = $kint['koeficientas'] + 1;

echo "". $pataisytas ."";

 

Atiduoda tik 1. Mėginau pakeist į FLOAT ir dar kartą lentelėj reikšmes perrašiau, bet vistiek kažko pyksta jis ir neduoda ko reik :/

Redagavo mauzeris
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pataisiau, bet vistiek tas pats. Kaip jau sakiau, man ištraukia koeficientą gerai:

 

$kint['koeficientas'];
echo "". $kint['koeficientas'] ."";

 

Atiduoda 0,3, o jau

 

$pataisytas = $kint['koeficientas'] + 1;

echo "". $pataisytas ."";

 

Atiduoda tik 1. Mėginau pakeist į FLOAT ir dar kartą lentelėj reikšmes perrašiau, bet vistiek kažko pyksta jis ir neduoda ko reik :/

Na nebežinau... Bandyk tą 1 daryti float'u, t.y. 1.0.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kad cia panasu i "nuostabuji" (kad ji kur velnias) PHP automatini tipu parinkima (ar kaip pavadint...).

 

Zodziu, aiskinu kaip viskas veikia, nors paskutinis Silkes pasiulymas turejo issprest "problema".

 

Kad vienam kintamajam galetum priskirinet bet ka, viduje duomenys laikomi arba tekstu, arba kazkuo panasiu (nesigilinau i PHP specifika), nors del sito GAL ir klistu. Bet akivaizdu, kad traukiant reiksmes is DB standartines funkcijos visada by default grazina teksta - reiskia tavo $kint['koeficientas'] visada yra tekstas, nepriklausomai nuo to, koks tipas nurodytas DB. Kai tu darai +1, PHP nusprendzia, kad $kint['koeficientas'] yra sveikas skaicius (kadangi 1 yra sveikas skaicius), todel 0,1 patampa tiesiog 0. O 0 + 1 = 1. Kai tu darai echo $kint['k'], jis atspausdina reiksme kaip teksta, todel ir rodo tau neva teisinga reiksme.

Silkes pasiulymas (keista, kad toks nedrasus :) ) pakeisti 1 i 1.0 duoda PHP suprast kad sudeti nori skaicius per kableli, todel tekstini $kint['k'] interpretuoja jau kaip 0,1 ir atlieka 0,1 + 1,0 = 1,1.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Viską labai logiškai Jūs čia man paaiškinot, bet vistiek kažko nesudeda jis man kaip turi būt. Tikriausiai reikės mėgint kažką daryt, jau į mysql išsaugant reikšmę su + 1 :/

 

Na o jei pabandyt bruteforcint tipa, parasant

 

$pataisytas = ((float) $kint['koeficientas']) + 1.0;

 

?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na o jei pabandyt bruteforcint tipa, parasant

 

$pataisytas = ((float) $kint['koeficientas']) + 1.0;

 

?

 

Aš mėginau su settype() šitą padaryt ir paskui dar patikrinau su gettype(). Atiduoda "double". Aš kaip supratau tai iš esmės tas pats kaip ir float?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Aš mėginau su settype() šitą padaryt ir paskui dar patikrinau su gettype(). Atiduoda "double". Aš kaip supratau tai iš esmės tas pats kaip ir float?

 

Jo, double yra kaip ir float, tik didesni kieki duomenu talpina. Su tokiais skaiciais neturetu niekas skirtis - tai vistiek rezultatas 1, o ne 1,x ? O jei parasytum

 

echo (double) $pataisytas;

 

vistiek spausdins 1?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Jo, double yra kaip ir float, tik didesni kieki duomenu talpina. Su tokiais skaiciais neturetu niekas skirtis - tai vistiek rezultatas 1, o ne 1,x ? O jei parasytum

 

echo (double) $pataisytas;

 

vistiek spausdins 1?

 

Jo, vistiek atiduoda 1.

 

 

Aš asmeniškai, kai turėjau laikyti mysql skaičius su kableliais, naudojau decimal(6,20) pvz. (nežinau, ar tokia sintaksė, bet per MySQL workbench kūriau būtent taip).

 

Pabandžiau šitą, tik trumpesnį skaičių saugojau, bet vistiek tas pats.

 

Padariau tokį variantą:

 

$test = $kint['koeficientas'];
echo "
". $test ."<br>
". gettype($test) ."<br>
";
settype($test, "float");
echo "
". $test ."
". gettype($test)
";

 

Ir ka gaunam:

0.3
string
0
double

Vadinasi keičiant tipą jau nusinulina. Gal dabar kokių minčių kam kilo, nes mane jau pradėjo nervuot šitas vienetas :) . Stulpelis šiuo metu yra DECIMAL(6,2).

Redagavo mauzeris
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Hmm.. dar tokia mintis, kad servako (o gal net PHP) regional settingsai gali noret kablelio, o ne tasko kaip realiu skaiciu skirtuko. Pabandyk padaryt taip:

 

$kint['koeficientas'] = str_replace(".", ",", $kint['koeficientas']);
settype($kint['koeficientas'], "float");
echo $kint['koeficientas'];

 

gal pades...

 

p.s. str_replace gal ir ne geriausia funkcija siuo atveju, bet as ne PHP fanatas, tad parinkau pirma kuria radau :P

 

Jo, vistiek atiduoda 1.

 

 

 

 

Pabandžiau šitą, tik trumpesnį skaičių saugojau, bet vistiek tas pats.

 

Padariau tokį variantą:

 

$test = $kint['koeficientas'];
echo "
". $test ."<br>
". gettype($test) ."<br>
";
settype($test, "float");
echo "
". $test ."
". gettype($test)
";

 

Ir ka gaunam:

0.3
string
0
double

Vadinasi keičiant tipą jau nusinulina. Gal dabar kokių minčių kam kilo, nes mane jau pradėjo nervuot šitas vienetas :) . Stulpelis šiuo metu yra DECIMAL(6,2).

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Hmm.. dar tokia mintis, kad servako (o gal net PHP) regional settingsai gali noret kablelio, o ne tasko kaip realiu skaiciu skirtuko. Pabandyk padaryt taip:

 

$kint['koeficientas'] = str_replace(".", ",", $kint['koeficientas']);
settype($kint['koeficientas'], "float");
echo $kint['koeficientas'];

 

gal pades...

 

p.s. str_replace gal ir ne geriausia funkcija siuo atveju, bet as ne PHP fanatas, tad parinkau pirma kuria radau :P

 

Mintis liuks :) . Tik gavosi atvirkščiai - php nori taško vietoj kablelio, nors db surašyta su taškais, tai aš biškį patiuningavau kodą ir leeeedas :) . Let's get back to work ;)

 

$kint = (float)str_replace(',','.', $row['kint']) + 1.0;

echo "". $kint ."";

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Mintis liuks :) . Tik gavosi atvirkščiai - php nori taško vietoj kablelio, nors db surašyta su taškais, tai aš biškį patiuningavau kodą ir leeeedas :) . Let's get back to work ;)

 

$kint = (float)str_replace(',','.', $row['kint']) + 1.0;

echo "". $kint ."";

Hm, tai keista, jei DB surašyta su taškais, tai negi PHP paverčia į kablelį? :blink:

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...