praegune kellaaeg 26.06.2025 22:00:04
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
LiivaneLord
Sõpradele "Olavi"
liitunud: 20.06.2006
|
14.02.2012 21:55:13
Vaja abi array loomisel |
|
|
Oskab keegi öelda, mis mul valesti on või anda nõu, mil viisil saab luua arrayd. Aadressil http://liivanelord.planet.ee/viking/index2.php?1=&2=&3=&4=&5=&6=&7=&8=&9=&10=&11=&sagedus=on&vt=Vaata on kõige parempoolsem tabel mõeldud selle jaoks, et näidata, millal numbrid 1-48 viimati Vikingus välja loositi
Nagu praegu näha, siis esimene number on 0, mida tegelikkuses vikingus välja ei loosita, aga olemas on seetõttu, et array ei salvesta võtmena lotonumbreid, vaid paneb neid lihtsalt järjest, alustades nullist. Ma tahaks luua array, kus võtmeks oleks lotonumber ja väärtuseks see, millal see number viimati välja loositi. Ehk siis tegelikkuses ei loositud nr 1 välja mitte 6 nädalat tagasi, vaid 7. Samamoodi 2 loositi välja mitte 8, vaid hoopis 6 nädalat tagasi jne. Ühesõnaga on nihkes see asi.
Minu eesmärk ei ole mitte seda nihet kaotada, vaid siduda omavahel lotonumber ja millal see viimati esines, sest ma tahan sellest nimekirjas luua teistsuguseid järjekordi ja siis läheb kogu numbrite järjekord paigast ära.
Kood, mis seda tabelit loob, on ise selline:
php:
|
$array_n= array("I", "II", "III", "IV", "V", "VI", "lisa1", "lisa2"); for ($x=1;$x<=48;$x++){ $v=-1; $vv=0; $sql_viimati= mysql_query("select * from $viking order by nr DESC"); $v=$v+1; foreach($array_n as $voti=>$väärtus){ if($viimati[$väärtus]==$x){ $vv=1; break; } } if($vv==1){ break;} } } foreach($sagedus_array as $voti=>$vaartus){ echo "<tr><td>$voti</td><td>$vaartus</td></tr>"; }
|
Ma ei saa sellest aru, miks $sagedus_array=array_merge($sagedus_array, array("$x"=>"$v")); ei loo mulle arrayd, mis sisaldab (1=>7, 2=>6, 3=>8 jne), vaid loob array hoopis selliselt (0=>7, 1=>6, 2=>8 jne)? Ometi ju lisasin "$x"=>"$v", kus võtmeks on lotonumber ($x) ja väärtuseks on nädala number, millal see viimati esines ($v).
Teine küsimus veel. Nagu praegu näha, siis see for avaldus tekitab andmebaasis 48 päringut 1 päringu asemel. Kas on võimalik teha üks päring ja selle alusel töödelda andmed? Proovisin lisada mysql_query enne for avaldust, kuid tulemuseks oli see, et nädala numbrid ei näidanud mitte numbrite viimast esinemist loetuna viimasest loosimisest, vaid loetuna eelmise numbri viimasest esinemisest.
|
|
Kommentaarid: 20 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
19 |
|
tagasi üles |
|
 |
keevitaja
AM 10 aastat

liitunud: 05.11.2001
|
14.02.2012 22:48:44
|
|
|
$sql_viimati=mysql_query("select * from $viking order by nr DESC"); |
see võtab ju kogu aeg ühed ja samad read välja. ja nii 48 korda järjest. milline su tabeli ehitus on. ma ei saa tegelikult aru, mida sa tahad teha.
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
 |
LiivaneLord
Sõpradele "Olavi"
liitunud: 20.06.2006
|
15.02.2012 00:34:52
|
|
|
keevitaja, ma tahan arrayd, milledes võtmeks ehk keyks oleks lotonumber (1-48) ja väärtuseks ehk valueks oleks vastavalt, et mitu nädalat tagasi see number viimati esines. Praegusel juhul küll tekib array, aga võti suureneb automaatselt ja algab nullist, kuid ainult väärtus on õige ja õiges järjekorras.
Mul on vaja seda arrayd, et saaksin nimekirja sorteerida, sest praegusel juhul on tabelis järjekord võtme kasvavas järjekorras, kuid mina soovin ka teisi järjestamise võimalusi. Sorteerida näiteks väärtuste kasvavasse/kahanevasse järjekorda.
Kui pole koodist aru saada, siis array_n on veergude nimekiri andmebaasis (I-VI põhinumbrid ning lisa1 ja lisa2 on lisanumbrid). $x algab numbrist 1 seetõttu, et lotonumbrid on 1-48. $v on number, mis näitab, mitu nädalat tagasi vastav lotonumber esines. Kui see oli möödunud nädalal, siis on see 0 ja vastavalt sellele kasvav.
Ma ei saanud tabeli ehituse küsimusest aru. Kui kõige parempoolset tabelit pole näha, siis veendu, et linnuke on kastis "Näita numbrite esinemissagedust", kuigi URL kohaselt peaks see seal olema automaatselt.
|
|
Kommentaarid: 20 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
19 |
|
tagasi üles |
|
 |
keevitaja
AM 10 aastat

liitunud: 05.11.2001
|
15.02.2012 01:05:08
|
|
|
ma pidasin mysql tableit silmas.
$array_n=array("I","II","III","IV","V","VI","lisa1","lisa2");
array(
0 => 'I',
1 => 'II'
jne
sama moodi hakkavad keyd pihta nullist sul mysql_fetch_array puhul. ma ei tea, kas sellest on sulle nüüd kasu
_________________ Hinnavaatlus ei ole koht arvamuse avaldamiseks! |
|
Kommentaarid: 51 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
3 :: |
40 |
|
tagasi üles |
|
 |
iFlop
Kreisi kasutaja

liitunud: 03.05.2003
|
15.02.2012 01:13:05
|
|
|
Sellise lotonumbrite sagedustabeli saaksid väga lihtsast andmebaasist otse kätte, kui baasi mudelis oleks iga loositud number oma reas.
Saan aru, et andmebaasis on tulemused sellisel kujul:
Loos I II III IV V VI lisa1 lisa2
985 27 31 35 36 40 48 13 33 |
Mille mina muudaks aga mudeli selliseks:
loos # nr
985 I 27
985 II 31
985 III 35
985 IV 36
985 V 40
985 VI 48
985 lisa1 13
985 lisa2 33 |
|
|
Kommentaarid: 67 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
66 |
|
tagasi üles |
|
 |
LiivaneLord
Sõpradele "Olavi"
liitunud: 20.06.2006
|
15.02.2012 01:50:04
|
|
|
keevitaja, täiesti valesti oled asjast aru saanud.
iFlop, jah, täpselt selliselt on need andmebaasis, nagu esimesena mainisid. Igal loosil on oma rida ja seal on need vastavalt I, II, III jne.
Ma saan aru, et lotonumbri viimase väljaloosimise saan kätte sel viisil, et leian päringuga järjekorrast esimese numbri ja teen vastava loosimise numbri lahutuse, et saada kätte $v väärtus. Aga mul oleks sellegipoolest vaja arrayd, mille võtmeks on lotonumber ja väärtuseks see, millal see esines, sest mul on vaja seda sorteerida väärtuste kasvavasse/kahanevasse järjekorda, sest see on oluline info.
Eelkõige sooviks leida lahenduse praegusele andmebaasi tabelile, kui see võimalik. Kõik on praegu kena, kuid ma lihtsalt ei saa aru, miks praegusel juhul õiget arrayd ei teki? Kui lisan foreach avalduse ette rea sort($sagedus_array);, siis tekib tabel, kus on 0-0, 1-0, 2-0, 3-0 ... 8-1, 9-1 jne, mis ei ole õige informatsioon.
|
|
Kommentaarid: 20 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
19 |
|
tagasi üles |
|
 |
neros
HV Guru

liitunud: 26.11.2003
|
15.02.2012 08:54:00
|
|
|
SELECT nr FROM $viking WHERE 'I' = $x OR 'II' = $x OR 'III' = $x OR 'IV' = $x OR 'V' = $x OR 'VI' = $x OR 'lisa1' = $x OR 'lisa2' = $x ORDER BY nr DESC LIMIT 1
|
Selle paned sinna asemele. Sealt saad kohe teada millisel nädalal see number viimati loositi. Miinusena muidugi, et tuleb 48 päringut.
... Muidugi kui sa soovid PHP'ga seda teha, viska enda praegune query üldse väljapoole for'i, tee temast massiiv ja parsi seda PHP'ga.
_________________ GitHub
.NET Core & Azure baasil lahendused ja arhitektuur - kontakt. |
|
Kommentaarid: 48 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
40 |
|
tagasi üles |
|
 |
iFlop
Kreisi kasutaja

liitunud: 03.05.2003
|
15.02.2012 10:53:40
|
|
|
LiivaneLord, kui db tõesti muuta ei soovi siis saad kasutada union'i, ehk midagi sellist:
sql:
|
SELECT nr, count(nr) FROM ( SELECT I AS nr FROM viking UNION ALL SELECT II AS nr FROM viking UNION ALL SELECT III AS nr FROM viking UNION ALL SELECT IV AS nr FROM viking UNION ALL SELECT V AS nr FROM viking UNION ALL SELECT VI AS nr FROM viking UNION ALL SELECT lisa1 AS nr FROM viking UNION ALL SELECT lisa2 AS nr FROM viking) AS numbrid GROUP BY nr
|
|
|
Kommentaarid: 67 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
66 |
|
tagasi üles |
|
 |
andrusny
Kreisi kasutaja

liitunud: 20.03.2006
|
15.02.2012 14:00:39
|
|
|
tsitaat: |
Aga mul oleks sellegipoolest vaja arrayd, mille võtmeks on lotonumber ja väärtuseks see, millal see esines |
Kas ma saan nüüd õigesti aru, sul on näiteks II loosimine ja numbrid on seal 2, 6, 15
Siis sa sooviks sellist arrayd
2=>3, 6=>3, 15=>3
saad selliselt teha ju
$loto=Array();
$loto[2]=3;
$loto[6]=3;
$loto[15]=3; |
Kuid kas poleks mõistlikum panna ühe loosimise numbrid kõik ühte masiivi?
$sql_viimati=mysql_query("select * from $viking order by nr DESC");
$loto=Array();
while($viimati=mysql_fetch_array($sql_viimati)){
$loto[1][]=$viimati['I'};
$loto[2][]=$viimati['II'};
$loto[3][]=$viimati['III'};
// jne..
}
// teise loosimise numbrid
var_dump($loto[2]); |
_________________
 |
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
LiivaneLord
Sõpradele "Olavi"
liitunud: 20.06.2006
|
16.02.2012 00:21:33
|
|
|
haha Hommik oli õhtust targem ja hommikul tuli hoopis teine idee, kuidas array luua. Nimelt sirvisin veel ka Kuutõrvaja lehte, et saada mingeid vihjeid ja meelde tuletada massiivi funktsionaalsusi ja leidsin rea
$massiiv[0] = "Jaan";
$massiiv[1] = "Peeter";
$massiiv[2] = "Laur";
Ja rakendasin seda koheselt ka oma koodis:
php:
|
$array_n= array("I", "II", "III", "IV", "V", "VI", "lisa1", "lisa2"); $sql_viimati= mysql_query("select * from $viking order by nr DESC"); for ($x=1;$x<=48;$x++){ $v=-1; $vv=0; $v=$v+1; foreach($array_n as $voti=>$väärtus){ if($viimati[$väärtus]==$x){ $vv=1; break; } } if($vv==1){ break;} } $sagedus_array[$x]=$v; } foreach($sagedus_array as $voti=>$vaartus){ echo "<tr><td>$voti</td><td>$vaartus</td></tr>"; }
|
Lahendus oli lihtsamast lihtsam. Nagu näha, siis kasutasin kohe ka sorteerimist. http://liivanelord.planet.ee/viking/index2.php?1=27&2=31&3=35&4=36&5=40&6=33&7=&8=13&9=&10=&11=&sagedus=on&vt=Vaata on sorteerimisega ja http://liivanelord.planet.ee/viking/index3.php?1=&2=&3=&4=&5=&6=&7=&8=&9=&10=&11=&sagedus=on&vt=Vaata on ilma sorteerimiseta
Lisan, et numbrid on andmebaasis selliselt:
Spoiler 
iFlop - saan nüüd hakkama ühe päringuga. Hiljem võibolla vajadusel piiran seda, sest tõenäosus näitab, et vähemalt 100-200 viimase loosimise hulgas on kõik numbrid esindatud. Aga usun, et selle koha pealt on kood optimaalne.
andrusny ei ole ka päris nii. I, II, III jne on ühel loosimisel välja loositud numbrid.
Ühesõnaga sain oma põhiküsimusele ideaalse lahenduse. Seda massiivi saan sorteerida nii, kuidas ise tahan.
On aga üks väike teemaväline küsimus. Kui kasutaja soovib oma numbreid kontrollida, siis tegin nüüd selliselt, et saadetud andmed lisatakse aadressile. Nt index2.php?1=12&2=23&3=34&4=&5=&6=&7=&8=&9=&10=&11=&sagedus=on&vt=Vaata . Kas on võimalik aadressist eemaldada need numbrid, mis on tühjad? Pean silmas juba enne andmete saatmist serverile või server töötleb selliselt, et ei tagastaks aadressi, kus on ka tühjad kirjed esindatud.
1, 2, 3 jne on input type="text" nimed. Kui ma jätan need väljad tühjaks, siis teoreetiliselt ei tohiks need ju ka aadressireale ilmuda. Kui kasutada sageduste checkboxi ja kui seal linnukest pole, ei ilmu seda ka aadressireale ja kui linnuke on valitud, on see aadressis. Kas sama meetodit ei saa rakendada kuidagi ka tekstikastides?
Uurisin netist asja ja seal kasutatakse keerulisi javascripti koode. Mingit lihtsat lahendust pole?
Spoiler 
php:
|
<tr title="Numbrite järjekord pole oluline"><td>1.</td><td>2.</td><td>3</td><td>4.</td><td>5.</td><td>6.</td><td>7</td><td>8.</td><td>9.</td><td>10.</td><td>11.</td></tr> <tr title="Numbrite järjekord pole oluline"><td><input type="text" id="1" class="vaata" value="<? echo $_GET['1']?>" /></td><td><input type="text" id="2" class="vaata" value="<? echo $_GET['2']?>"/></td><td><input type="text" id="3" class="vaata" value="<? echo $_GET['3']?>"/></td><td><input type="text" id="4" class="vaata" value="<? echo $_GET['4']?>"/></td><td><input type="text" id="5" class="vaata" value="<? echo $_GET['5']?>"/></td><td><input type="text" id="6" class="vaata" value="<? echo $_GET['6']?>"/></td><td><input type="text" id="7" class="vaata" value="<? echo $_GET['7']?>"/></td><td><input type="text" id="8" class="vaata" value="<? echo $_GET['8']?>"/></td><td><input type="text" id="9" class="vaata" value="<? echo $_GET['9']?>"/></td><td><input type="text" id="10" class="vaata" value="<? echo $_GET['10']?>"/></td><td><input type="text" id="11" class="vaata" value="<? echo $_GET['11']?>"/></td></tr> <tr><td colspan= "5" align= "left"><br /><input type= "checkbox" name= "tabel"<? if(! empty($_GET['tabel'])){echo " checked='yes'"; }?>/><a title= "Vaikimisi näitab ainult 100 viimast loosimist">Näita kogu tabelit</a><br /><input type= "checkbox" name= "värviline"<? if(! empty($_GET['värviline'])){echo " checked='yes'"; }?>/><a title= "Sagedamini esinevad numbrid on tumedamad">Näita tabelit värvilisena</a><br /><input type= "checkbox" name= "sagedus"<? if(! empty($_GET['sagedus'])){echo " checked='yes'"; }?>/><a title= "Lisab tabeli, kus on numbrite esinemissagedus protsentidena">Näita numbrite esinemissagedust</a><br /><br /></td></tr> <tr><td colspan= "11" align= "left"><input type= "submit" onclick= "for(x=1;x<12;x++){if(document.getElementById(x).value!=''){document.getElementById(x).name=x;}}" name= "vt" value= "Vaata" title= "Kontrolli oma numbreid"/> <input type= "button" value= "Uus päring" onclick= "for(x=1;x<12;x++){document.getElementById(x).value='';}" /><a title= "Kombinatsioonide vaatamise hulk kokku"> Päringuid: <? echo $paringuid;?></a><a title= "Külaliste hulk kokku"> Külastusi: <? echo $kulastusi;?></a> Tabeli koostas <a href= "https://foorum.hinnavaatlus.ee/profile.php?mode=viewprofile&u=26520" target= "_blank">LiivaneLord</a> ja kaasa aitas 'omaette'!</td></tr>
|
Edit: Krt, ikka ei saa ühe päringuga. Numbrid on valed.
Edit2: Lahendasin asja madedog poolt antud päringut kasutades ja kustutasin ära kõik mõttetud funktsioonid.
php:
|
for ($x=1;$x<=48;$x++){ $v=-1; $vv=0; $viimati= mysql_fetch_array(mysql_query("select nr from $viking where I=$x or II=$x or III=$x or IV=$x or V=$x or VI=$x or lisa1=$x or lisa2=$x order by nr DESC limit 1")); $sagedus_array[$x]=$loosimiste_hulk[0]-$viimati[nr]; } foreach($sagedus_array as $voti=>$vaartus){ echo "<tr><td>$voti</td><td>$vaartus</td></tr>"; }
|
Edit3: Sain kõik lahendatud! URLi probleemile sain lahenduse ning uuendasin seda html süntaksis. Suured tänud abistajatele, teist oli väga palju abi.
|
|
Kommentaarid: 20 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
19 |
|
tagasi üles |
|
 |
neros
HV Guru

liitunud: 26.11.2003
|
16.02.2012 06:19:21
|
|
|
Oleks võinud kohe alguses pakutud queryt kasutada
Kui sa väga tahad, võid dünaamiliselt query kokku klopsida et ühe queryga hakkama saada..
$query = "";
for($x = 1; $x <= 48; $x++){
if($x > 1)
$query .= " UNION ALL ";
$query .= "SELECT nr, $x AS pall FROM $viking WHERE I=$x OR II=$x OR III=$x OR IV=$x OR V=$x OR VI=$x OR lisa1=$x OR lisa2=$x ORDER BY nr DESC LIMIT 1";
}
|
Ei garanteeri et töötab nagu peab aga võiks Kui soovid võid selle ka veel subquerysse mässida ja ülemises teha kõik sorteerimised. Saad kohe tagasi sorteeritud väärtused ja võid PHP sordi ka minema visata. Lisaks on dünaamilisi sortimisi parem teha.
Even though mulle väga subqueryd sellisel kujul ei meeldi, eriti need mis on dünaamiliselt kokku löödud, kipuvad suuremates tabelites aeglased olema, aga sul vist seda ei teki.
_________________ GitHub
.NET Core & Azure baasil lahendused ja arhitektuur - kontakt. |
|
Kommentaarid: 48 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
40 |
|
tagasi üles |
|
 |
LiivaneLord
Sõpradele "Olavi"
liitunud: 20.06.2006
|
16.02.2012 18:54:26
|
|
|
madedog, ei tea midagi - kogu tabel sisaldab peaaegu 1000 rida. Vaikimisi on lühendatud 100 peale, kuna suure tabeli ettemanamine brauseri poolt on väikese viivitusega ja üldjuhul pole seda alati ka tarvis.
|
|
Kommentaarid: 20 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
19 |
|
tagasi üles |
|
 |
neros
HV Guru

liitunud: 26.11.2003
|
17.02.2012 08:38:56
|
|
|
Just nimelt 1000 rida ei ole andmebaasi tabeli jaoks rohkem kui vette sülitamine kalamehe jaoks. "Suuremad tabelid" on juba kuue-seitsme numbri kanti ja rohkem, sõltuvalt kasutatavast mootorist ja struktuurist. Seni kuni indeksid paigas on ei tohiks probleeme tekkida.
_________________ GitHub
.NET Core & Azure baasil lahendused ja arhitektuur - kontakt. |
|
Kommentaarid: 48 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
40 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|