Autor Zpráva
Watchick
Profil
Zdravím, potřeboval bych udělat to, že když uživatel klikne na "Nick" seřadí se mu to sestupně, či vzestupně podle nicku, když klikne na jiný údaj, aby se mu to seřadilo podle něj... atd...
Momntálně vybírám postupně uživatele z tabulky1 a pak ke každému načtu číselné údaje z jiné tabulky2 a pak součet těch dat z tabulky2.
Nakonce vypíšu jako jméno z tabulky1 a poté součet údajů z tabulky2
Momentálně můj strašný kód vypadá takto:


$co="SELECT * FROM tabulka_1 WHERE active='1' AND idaliance='".$idaliance."' ORDER BY posledni_zmena desc";
require "spojeni2.php";
while (list($id, $idaliancelist ,$nick, $heslo, $narod, $utok, $obranap, $obranak, $posledni_zmena, $heroutok, $heroutokp, $heroobrana, $heroobranap, $heroregenerace, $mail, $active, $server, $jmeno, $sex, $langport, $aktivita, $lang, $check,$skupina,$skupinaactive,$zobrazit) = mysql_fetch_array($navrat)){


$co="SELECT * FROM ************** WHERE idhrace='$id'";
require "spojeni3.php";
$lll = "0";
while (list($idvesnice,$idhrace, $nazev, $jed1, $jed2, $jed3, $jed4, $jed5, $jed6, $jed7, $jed8, $jed9, $jed10, $sypak, $zed) = mysql_fetch_array($navrat1)){
$jedn1 += $jed1;
$jedn2 += $jed2;
$jedn3 += $jed3;
$jedn4 += $jed4;
$jedn5 += $jed5;
$jedn6 += $jed6;
$jedn7 += $jed7;
$jedn8 += $jed8;
$jedn9 += $jed9;
$jedn10 += $jed10;
$lll = "1";
}
if($lll == "0"){
$jedn1 = "";
$jedn2 = "";
$jedn3 = "";
$jedn4 = "";
$jedn5 = "";
$jedn6 = "";
$jedn7 = "";
$jedn8 = "";
$jedn9 = "";
$jedn10 = "";
}

$cas2 = explode('-',$posledni_zmena);
$cas1 = $cas2[2] . "." .  $cas2[1] . "." .  $cas2[0] . " " . $cas2[3] . ":" . $cas2[4] . ":" . $cas2[5];

// odsud už je to pouze výpis dat
$mavesnice = mysql_result(mysql_query("SELECT COUNT(*) FROM ************** WHERE idhrace='$id'"), 0);
if($mavesnice == 0){
echo"<small></small><tr><td><small><center>$jmeno</center></small></td  ><td><small><center>$jedn1vys</center></small></td><td><small><center>  $jedn2vys</center></small></td><td><small><center>$jedn3vys</center></  center></small></td><td><small><center>$jedn4vys</center></small></td>  <td><small><center>$jedn5vys</small></td><td><small><center>$jedn6vys<  /center></small></td><td><small><center>$jedn7vys</center></small></td  ><td><small><center>$jedn8vys</center></small></td><td><small><center>  $jedn9vys</center></small></td><td><small><center>$jedn10vys</center><  /small></td><td><small><center><abbr class=\"titleukaz\" title=\" $temp1 $temp2 $temp3 $temp4 $temp5\">$herobody&nbsp;lvl.</abbr></center></small></td><td><small><c  enter>$utokvys</center></small></td><td><small><center>$obranapvys</ce  nter></small></td><td><small><center>$obranakvys</center></small></td>  <td><small><center>$cas</center></small></td></tr>\n";
}else{
echo"<small></small><tr><td><small><center><a href=\"index.php?menu=7&idhrace=$id\" class=\"odkaz\">$jmeno</a></center></small></td><td><small><center>$je  dn1vys</center></small></td><td><small><center>$jedn2vys</center></sma  ll></td><td><small><center>$jedn3vys</center></center></small></td><td  ><small><center>$jedn4vys</center></small></td><td><small><center>$jed  n5vys</small></td><td><small><center>$jedn6vys</center></small></td><t  d><small><center>$jedn7vys</center></small></td><td><small><center>$je  dn8vys</center></small></td><td><small><center>$jedn9vys</center></sma  ll></td><td><small><center>$jedn10vys</center></small></td><td><small>  <center><abbr class=\"titleukaz\" title=\" $temp1 $temp2 $temp3 $temp4 $temp5\">$herobody&nbsp;lvl.</abbr></center></small></td><td><small><center>$utokvys</center></small></td><td><small><center>$obranapvys</center></small></td><td><small><center>$obranakvys</center></small></td><td><small><center>$cas</center></small></td></tr>\n";
}
}



No :-) tak toď můj kód, ale chcui se zeptat, jak by se to tedy dalo vypisovat třeba seřazené ASC podle $jedn1vys

$jedn1vys je úplně stejné jako $jedn1, akorát v případech kdy je to číslo moc velké zmenšuji jeho velikost, kód je poměrně velký a nechci s ním zatěžovat

Napadlo mě, že bych udělal stejný select, ale nic bych nevypsal a data uložil do pole
třeba jako:

$prehled['$id']['nick'] = "$nick";
$prehled['$id']['jedn1'] = "$jedn1";
...

a pak bych udělal nějaký foreach (se kterým neumím) a postupně bych to procházel? Ale nenašel jsem jak udělat u foreach stejně jako v SQL"ORDER BY jedn1 DESC"... Pokud to vůbec jde...
Nebo na to lze aplikovat nějaký SQLpříkaz podle čeho třídit, takže bych to nemusel celé předělávat?
Předem díky za radu Watchick
BetaCam
Profil
Watchick

Vybírej to normálně tabulky si spoj přes JOIN a pak můžeš normálně řadit pomocí ORDER BY
Watchick
Profil
OK JOIN jsem už kdesy zaslechl :-) letmo ... mohu bych porposit ještě trochu pomoci?
BetaCam
Profil
Watchick

No on ten tvůj kód není zrovna UserFrendly :) Vyznat se v tom je opravdu oříšek.
Watchick
Profil
OK...já to popíšu co možná nejlépe mohu:-)
Watchick
Profil
Tak vše s popisem :-)

// Vše je vlastně o výpisu číslených dat z tabulky... ale neboť každý uživatel má více "vesnic" (prostě řádků v tabulce s číselnými daty) musí se data všech jeho vesnic nejdříve sečíst (tedy uživatel "jarda" má 3 vesnice a v každé má:)
// legenda: id,idhrace,nazev vesnice,jedn1,jedn2,jedn3,jedn4,jedn5,jedn6,jedn7,jedn8,jedn9,jedn10,u roven  sypky, uroven zdi
//1,1,mojeves,101,102,103,104,105,106,107,108,109,110,20,20
//1,1,mojeves,1,      2,    3,    4,    5,    6,     7,    8,    9,  10,20,20
//1,1,mojeves,0,      1,    0,    1,     0,   1,     0,    1,    0,   1, 20,20
tedy v celkovém přehledu se vypíše u jeho jména:
//Jarda,102,105,106,109,110,113,114,117,118,121, (tady  jsou pak jiné informace, se kterými bych se nezatěžoval...)
//doufám, že čísla, ke kterým jsem se dostal jsou jasé :-)

//no a tak má tedy Jarda takovýho sloupec... podobným způusobem se dostanou k výsledku i ostatní členové aliance

// Vybere postupně všechny uživatele dané aliance (uživatelské skupiny)
$co="SELECT * FROM tabulka_1 WHERE active='1' AND idaliance='".$idaliance."' ORDER BY posledni_zmena desc";
require "spojeni2.php";
//ve spojeni2.php je:
//<?php
//$spojeni=mysql_connect("***","***","***");
//$navrat=mysql_db_query("***", $co, $spojeni);
//?>

//tenhle while postupně vysype všechny všechny údaje... ANO vím že * není ideání
while (list($id, $idaliancelist ,$nick, $heslo, $narod, $utok, $obranap, $obranak, $posledni_zmena, $heroutok, $heroutokp, $heroobrana, $heroobranap, $heroregenerace, $mail, $active, $server, $jmeno, $sex, $langport, $aktivita, $lang, $check,$skupina,$skupinaactive,$zobrazit) = mysql_fetch_array($navrat)){

//2. výběr, výběr všech dat z tabulky2, podle ID z tabulky1
$co="SELECT * FROM ************** WHERE idhrace='$id'";
require "spojeni3.php";
//ve spojeni3.php je:
//<?php
//$spojeni=mysql_connect("***","***","***");
//$navrat1=mysql_db_query("***", $co, $spojeni);
//?>
$lll = "0";
//opět vysype tentokrát všechny údaje daného uživatele
while (list($idvesnice,$idhrace, $nazev, $jed1, $jed2, $jed3, $jed4, $jed5, $jed6, $jed7, $jed8, $jed9, $jed10, $sypak, $zed) = mysql_fetch_array($navrat1)){
//pokud je řádků více navzájem se sečtou
$jedn1 += $jed1;
$jedn2 += $jed2;
$jedn3 += $jed3;
$jedn4 += $jed4;
$jedn5 += $jed5;
$jedn6 += $jed6;
$jedn7 += $jed7;
$jedn8 += $jed8;
$jedn9 += $jed9;
$jedn10 += $jed10;
$lll = "1";
}

//pouze estetická záležitost, aby to nezobrazovalo 0ly, u jedn1,jedn2, ... pokud uživatel nemá v tabulce2 ani 1 řádek 
if($lll == "0"){
$jedn1 = "";
$jedn2 = "";
$jedn3 = "";
$jedn4 = "";
$jedn5 = "";
$jedn6 = "";
$jedn7 = "";
$jedn8 = "";
$jedn9 = "";
$jedn10 = "";
}
//dá čas do správného formátu
$cas2 = explode('-',$posledni_zmena);
$cas1 = $cas2[2] . "." .  $cas2[1] . "." .  $cas2[0] . " " . $cas2[3] . ":" . $cas2[4] . ":" . $cas2[5];

// odsud už je to pouze výpis dat
$mavesnice = mysql_result(mysql_query("SELECT COUNT(*) FROM ************** WHERE idhrace='$id'"), 0);
if($mavesnice == 0){
echo"<small></small><tr><td><small><center>$jmeno</center></small></td    ><td><small><center>$jedn1vys</center></small></td><td><small><center>    $jedn2vys</center></small></td><td><small><center>$jedn3vys</center></    center></small></td><td><small><center>$jedn4vys</center></small></td>    <td><small><center>$jedn5vys</small></td><td><small><center>$jedn6vys<    /center></small></td><td><small><center>$jedn7vys</center></small></td    ><td><small><center>$jedn8vys</center></small></td><td><small><center>    $jedn9vys</center></small></td><td><small><center>$jedn10vys</center><    /small></td><td><small><center><abbr class=\"titleukaz\" title=\" $temp1 $temp2 $temp3 $temp4 $temp5\">$herobody&nbsp;lvl.</abbr></center></small></td><td><small><c    enter>$utokvys</center></small></td><td><small><center>$obranapvys</ce    nter></small></td><td><small><center>$obranakvys</center></small></td>    <td><small><center>$cas</center></small></td></tr>\n";
}else{
echo"<small></small><tr><td><small><center><a href=\"index.php?menu=7&idhrace=$id\" class=\"odkaz\">$jmeno</a></center></small></td><td><small><center>$je    dn1vys</center></small></td><td><small><center>$jedn2vys</center></sma    ll></td><td><small><center>$jedn3vys</center></center></small></td><td    ><small><center>$jedn4vys</center></small></td><td><small><center>$jed    n5vys</small></td><td><small><center>$jedn6vys</center></small></td><t    d><small><center>$jedn7vys</center></small></td><td><small><center>$je    dn8vys</center></small></td><td><small><center>$jedn9vys</center></sma    ll></td><td><small><center>$jedn10vys</center></small></td><td><small>    <center><abbr class=\"titleukaz\" title=\" $temp1 $temp2 $temp3 $temp4 $temp5\">$herobody&nbsp;lvl.</abbr></center></small></td><td><small><center>$utokvys</center></small></td><td><small><center>$obranapvys</center></small></td><td><small><center>$obranakvys</center></small></td><td><small><center>$cas</center></small></td></tr>\n";
}
}
Watchick
Profil
Přehlednější?
Watchick
Profil
Zdravím, tak jsem složil takovýto příkaz:
SELECT *, SUM(jedn1) AS 'jedn1', SUM(jedn2) AS 'jedn2', SUM(jedn3) AS 'jedn3', SUM(jedn4) AS 'jedn4', SUM(jedn5) AS 'jedn5', SUM(jedn6) AS 'jedn6', SUM(jedn7) AS 'jedn7', SUM(jedn8) AS 'jedn8', SUM(jedn9) AS 'jedn9', SUM(jedn10) AS 'jedn10' FROM ************** LEFT JOIN ******* ON *******.id=**************.idhrace GROUP BY idhrace; 

Což by podle všeho mělo fungovat... ale ještě bych tam rád zaimplantoval, aby se bralo date pouze jako date te vesnice, ktera ma date nejvetsi neco jako , MAX(date) AS 'maxdate' ale tohle podle vseho neni dobre, tak jestli by jste mi to tam prosim do toho prikazu nekdo nedal? díky moc
Watchick
Profil
tak jsem to ještě trochu poupravil... na:
SELECT idhrace,**************.posledni_zmena,SUM(jedn1) AS 'jedn1c', SUM(jedn2) AS 'jedn2c', SUM(jedn3) AS 'jedn3c', SUM(jedn4) AS 'jedn4c', SUM(jedn5) AS 'jedn5c', SUM(jedn6) AS 'jedn6c', SUM(jedn7) AS 'jedn7c', SUM(jedn8) AS 'jedn8c', SUM(jedn9) AS 'jedn9c', SUM(jedn10) AS 'jedn10c' FROM ************** LEFT JOIN ******* ON *******.id=**************.idhrace GROUP BY idhrace ORDER BY idhrace ASC;

Ale to co se mi tedy opravdu nepovedlo a nevím jak na to je Dát podmínku " WHERE idaliance = '3' ", prostě aby to vybíralo pouze hráče s
travi an.idaliance = '3' kde travi an.id = trav ianaliance.idhrace

problem je trochu v tom, že sloupeček "idaliance" mam jen v tabulce travi an, a ne v tabulce travi anvesnice
Kajman_
Profil *
Podmínku můžete dát do on.
Watchick
Profil
SELECT idhrace,trav*ianvesnice.posledni_zmena,
SUM(jedn1) AS 'jedn1c', 
SUM(jedn2) AS 'jedn2c',
 SUM(jedn3) AS 'jedn3c', 
SUM(jedn4) AS 'jedn4c', 
SUM(jedn5) AS 'jedn5c', 
SUM(jedn6) AS 'jedn6c', 
SUM(jedn7) AS 'jedn7c', 
SUM(jedn8) AS 'jedn8c', 
SUM(jedn9) AS 'jedn9c', 
SUM(jedn10) AS 'jedn10c' 
FROM trav*ianvesnice LEFT JOIN trav*ian 
ON trav*ian.id=trav*ianvesnice.idhrace AND trav*ian.idaliance='3' 
GROUP BY idhrace ORDER BY idhrace ASC;

mi nefungovalo

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0