| Autor | Zpráva | ||
|---|---|---|---|
| peta Profil |
#1 · Zasláno: 14. 12. 2006, 13:21:57 · Upravil/a: peta
Delam anketu a do SQL si ukladam
A = hodnoceni B = pocet hlasujicich (s hodnocenim>0) Potreboval bych to zaklicovat tak, aby mi dlouho neprohledaval, kdyz budu serazovat podle nejvetsiho A/B . 1. Samozrejme muzu zaindexovat oba sloupce zvlast, ale ja mam tech sloupcu A i B asi 10 (A0 A1 ...) a tim padem bych mel 20 indexu. 2. Nebo muzu zalozit jeste dalsi sloupec Vysledky a ukladat tam pomer obou cisel, cimz mi staci indexovat pouze vysledky. Coz je dalsich 10 sloupcu navic. nejake dalsi napady? |
||
| Aesir Profil |
#2 · Zasláno: 14. 12. 2006, 16:15:12 · Upravil/a: Aesir
peta:
kdyz budu serazovat podle nejvetsiho A/B . To není pro indexy až tak rozhodující, chtělo by to vidět konkrétní SELECT a následně zvolit asi vícesloupcový index, podle toho čím bude výběr řádků omezený (v klauzuli WHERE). |
||
| Kajman_ Profil * |
#3 · Zasláno: 14. 12. 2006, 16:46:11
Místo nynějších 20 sloupečků bych dal asi tři sloupečky (poradi, A, B). A na hledání poměru možná ten čtvrtý - měl by to zrychlit.
|
||
| peta Profil |
#4 · Zasláno: 15. 12. 2006, 08:39:14
Kajman_
ok, a jake 3, 4? jak by v nich mela byt data? Ja mam 2 tabulky, ted. jedna je hlasy (vote), druha je anketa (question) http://mracek.hostuju.cz/y/rs2-install.sql s tim, ze pri hlasovani potrebuji zapsat do tabulky hlasy-hlasovani a do tabulky anketa zase hlasy pricist/odecist + prepocitat vysledek. SQL: "`cat0A`=`cat0A`+'7'"; pri smazani volby zase potrebuji hlas odecist SQL: "`cat0A`=`cat0A`-'7'"; Aesir v klauzile WHERE budu mit bud A/B nebo jiny sloupecek, podle volby prohlizitele, podle ceho bude chtit serazovat (treba ID, kategorie, volba A0/B0 - A9/B9, volba celkem). Podle samotneto Ax se asi serazovat nebude, ale podle Bx by uz mohlo, to je pocet lidi, co hlasovali. Ten SELECT na zobrazovani vysledku jeste neni dodelany, zatim to resim teoreticky. Potrebuji to nejdrive ukladat. |
||
| peta Profil |
#5 · Zasláno: 15. 12. 2006, 09:43:02
momentalne mam teda 33 sloupcu pro hlasovani a PHP script vypada takto (pro kajman):
if($r["idquestion"]!=="" && $r["vote"]>0) { $r["id"] = ""; $x = array(); $y = array(); foreach($r as $key => $value) {$x[]="`$key`"; $y[]="'$value'";} $data1 = implode(",",$x); $data2 = implode(",",$y); $tab = $tb0."vote"; $dotaz = "INSERT INTO $tab ($data1) VALUES ($data2)"; mysql_query($dotaz) or die("<hr>Err add: $dotaz<hr>".mysql_error()); //++ $x = array(); $a="cat"; for($j=0;$j<10;$j++) { $b = $a.$j; $c = $b."A"; $x[]="`$c`=`$c`+'".$r[$b]."'"; if ($r[$b]>0) { $c = $b."B"; $x[]="`$c`=`$c`+'1'"; } $x[]="`".$b."AB`=`".$b."A`/`".$b."B`"; } $b="vote"; $c = $b."A"; $x[]="`$c`=`$c`+'".$r[$b]."'"; if ($r[$b]>0) { $c = $b."B"; $x[]="`$c`=`$c`+'1'"; } $x[]="`".$b."AB`=`".$b."A`/`".$b."B`"; $data0 = implode(",",$x); $tab = $tb0."question"; $dotaz = "UPDATE $tab SET $data0 WHERE `id` = '".$r["idquestion"]."' LIMIT 1"; mysql_query($dotaz) or die("<hr>Err update: $dotaz<hr>".mysql_error()); vsechny udaje mam nactene takovymto scriptem: function readPost($j) { global $ip,$datum0; $j = ""; $r = array(); $a = "idquestion"; $x = isset($_POST[$a.$j]) ? $_POST[$a.$j] : ""; $r[$a] = $x*1; $a = "vote"; $x = isset($_POST[$a.$j]) ? $_POST[$a.$j] : ""; $x = ($x>0 && $x<11) ? $x : 0; $r[$a] = $x*1; $a = "cat"; for ($j=0;$j<10;$j++) { $x = isset($_POST[$a.$j]) ? $_POST[$a.$j] : ""; $x = ($x>0 && $x<101) ? $x : 0; $r[$a.$j] = $x*1; } $j = ""; $a = "voter"; $x = isset($_POST[$a.$j]) ? $_POST[$a.$j] : ""; $reg = "[^a-zA-Z0-9]"; $x = ereg_replace($reg,"",$x); $r[$a] = $x; $a = "votermail"; $x = isset($_POST[$a.$j]) ? $_POST[$a.$j] : ""; $x = stripslashes($x); $reg = "@"; $x = (ereg($reg,$x)) ? ereg_replace($reg,"\@",$x) : ""; $x = substr($x,0,64); $r[$a] = $x; $a = "comment"; $x = isset($_POST[$a.$j]) ? $_POST[$a.$j] : ""; $x = HTMLSpecialChars($x); $r[$a] = $x; $a = "ip"; $r[$a] = $ip; $a = "date"; $r[$a] = $datum0; return $r; } a funguje to tak, ze v prvni casti si pridan hlas do tabulky hlasu (kde kontroluji ipcka a pod a krasne si to vypisuji do tabulky) a v druhe casti to uklada onech 33 hodnot jako 1 silene dlouhy dotaz. Coz neni 2x akcni, ale zatim lepsi zpusob nevim. |
||
| Aesir Profil |
#6 · Zasláno: 15. 12. 2006, 12:50:18
peta:
v klauzile WHERE budu mit bud A/B nebo jiny sloupecek, podle volby prohlizitele, podle ceho bude chtit serazovat (treba ID, kategorie, volba A0/B0 - A9/B9, volba celkem). Podle samotneto Ax se asi serazovat nebude, ale podle Bx by uz mohlo, to je pocet lidi, co hlasovali. Ten SELECT na zobrazovani vysledku jeste neni dodelany, zatim to resim teoreticky. Potrebuji to nejdrive ukladat. Určitě bych udělal index (B, A [DESC | ASC]), ostatní tedy podle toho, až se budete zaobírat výběrem z databáze. Možná by to chtělo se zamyslet nad trošku jiným návrhem tabulek, ale možná to, že jsem strukturu moc nepobral je způsobené nízkou hladinou kofeinu v mojí krvi. :) |
||
| thingwath Profil |
#7 · Zasláno: 15. 12. 2006, 12:54:30
Tak tu poslední tabulku nějak nepobírám k čemu je a co všechno tam má být uloženo.
|
||
| peta Profil |
#8 · Zasláno: 15. 12. 2006, 15:38:57
Aesir
V podstate to mam vyreseny ted tim dalsim sloupcem a nemusim prepocitavat pri cteni stale hlasy. thingwath V tech tabulkach jsou nepodstatne udaje. V tuto chvili mi jde o to, ze mam tabulku VOTE s, v0,v1,v2,v3,... v9 a tabulku QUESTION sa, sb, sab, a0,a1,a2,a3,... a9 b0,b1,b2,b3,... b9 ab0,ab1,ab2,... ab9 kde QUESTION do A ukladam An+hodnoceni 0..9 do B ukladam Bn+1, hodnotilo lidi+1 0..9 do AB ukladam An/Bn , cili vysledek hlasovani 0..9 do sA/B/AB podobne predchozim, celkove skore 0..9 jsou jednotlive kategorie, ktere muzes nebo nemusis vyplnit a VOTE do V ukladam hodnoceni 0..9 -> An=An+Vn do S celkove skore -> sA=sA+S |
||
|
Časová prodleva: 20 let
|
|||
Toto téma je uzamčeno. Odpověď nelze zaslat.
0