Autor Zpráva
abrakadabra
Profil *
Ahoj, mám problém. Chtěl bych udělat jednoduchou statistiku, bohužel se zaseknu při tom nejdůležitějším. A to je pořadí určité položky (v tomto případě jména). V tabulce mám vytvořené 2 sloupce, a to jmeno a pocet_bodu.
Seřadil jsem si celou tabulku pomoci ORDER BY pocet_bodu DESC a pak vytvořil něco ve stylu
for($i=1;$i<=$pocet_radku;$i++){
  if($jmeno==Adam){
    echo $i;
  }
}

bohužel tento cyklus nefunguje. Nevíte jak na to? Děkuji za každou radu.
abrakadabra
Profil *
Jsem ted zkoušel i
foreach($radek as $i) {
	  if($i==Adam) {
	    echo $g.".";
	  }
	  $g++;
	 }

a vypisuje to nesmyslné hodnoty. Nevím jak dál :(
_es
Profil
abrakadabra:
Tipujem, že by sa ti zišlo si najprv zistiť, ako sa v PHP (asi, programovací jazyk si nenapísal) zapisujú textové reťazce.
jenikkozak
Profil
abrakadabra:
Nejsem si jist, co vlastně chcete, ale nepomůže místní FAQ?
abrakadabra
Profil *
Jo, problém je ten, že ty údaje se v závisloti na počtu bodů můžou měnit....
_es: jsem začátečník, můžu se zeptat, kde jsem udělal chybu?
jenikkozak
Profil
abrakadabra:
jsem začátečník, můžu se zeptat, kde jsem udělal chybu?
„Adam“ je řetězec, musí být proto ohraničen uvozovkami nebo apostrofy.
Zda bude Váš skript poté fungovat, záleží na tom, jaké hodnoty vlastě ten $radek obsahuje.

U toho prvního skriptu máte dvě možnosti. Buď to bude psát postupně všechna čísla menší nebo rovna proměnné $pocet_radku, nebo to nevypíše nic. V závislosti na tom, zda proměnná $jmeno bude obsahovat (řekněme) řetězec Adam (bude-li označen jako řetězec). Ale stále se bude porovnávat totéž jméno, protože hodnota této proměnné se při průchodu cyklu nemění. Mění se jen proměnná $i, která vyhodnocována není.
abrakadabra
Profil *
Jo, už vím chybí uvozovky, to jsem jen tak rychlo sepsal zde, ve scriptu používám něco jiného, je jedno, jestli tu napíšu proměnnou nebo Adam.
abrakadabra
Profil *
jenikkozak: Oh, díky moc, myslel jsem si to, sepsal jsem to, jelikož jsem nevěděl jak na to. Ve scriptu to mám takto, ale vypíše to čísla, která s tím vůbec nesouvisí. V php zatím dlouho nedělám, tak jsem nato šel pomocí selského rozumu, ten bohužel neuspěl :(
$SQL=mysql_query("SELECT * FROM pozice ORDER BY pocet_bodu DESC");
	$pocet=mysql_num_rows($SQL);
	while($radek=mysql_fetch_array($SQL)){
	  extract($radek);
	 foreach($radek as $i) {
	  if($i==$_COOKIE['jmeno']) {
	    echo $g.".";
	  }
	  ++$g;
	 }
	}
abrakadabra
Profil *
Tak už jsem to vyřešil a funguje to skvěle. Pro zájemce, kteří mají stejné problém, to tu hodím, je to otázka napsání pár řádků.
$SQL=mysql_query("SELECT * FROM pozice ORDER BY pocet_bodu DESC");
  $pozice=0;
  while($radek=mysql_fetch_array($SQL)){
    extract($radek);
    $pozice++;

    if($jmeno==VASE POZADOVANE JMENO){
      echo"<b>".$pozice.".</b></br>";
    }
  }

Tenhle script pak můžete aplikovat i na statistiku s ostatními hráči. Každopádně děkuji jenikkozak, že jsi mi vysvětlil fungování toho prvního scriptu. Díky
Tori
Profil
abrakadabra:
Použití funkce extract je trochu nevýhodné v tom, že (není-li zadaný 2.parametr) bez upozornění přepíše existující proměnné. Pokud by v tabulce byl číselný sloupec pozice, tak na řádku 5 budete dostávat jinou hodnotu, než čekáte. Bezpečnější verze téhož:
  $SQL = mysql_query("SELECT jmeno FROM pozice ORDER BY pocet_bodu DESC"); // čteme jen sloupce,které potřebujeme.
  $pozice=0;
  while($radek = mysql_fetch_array($SQL)){
    $pozice++;
    if ($radek['jmeno'] == "VASE POZADOVANE JMENO"){
      echo "<b>".$pozice.".</b></br>";
      break; // použijte v případě, pokud může být v DB každé jméno jen jednou
    }
  }
Kajman_
Profil *
Z databáze stačí zjistit počet lidí, kteří mají lepší body a přičíst jedničku.

SELECT count(*) + 1 poradi 
FROM `pozice` p 
JOIN (SELECT pocet_bodu FROM `pozice` WHERE `jmeno`  = '$osetrene_jmeno') t 
ON p.pocet_bodu>t.pocet_bodu
abrakadabra
Profil *
Tori: ten break tam ani nemusí být, pokud to stačí vypsat jen jednou, jak v mojem případě, každopádně je to lepší.
Kajman_: Právě tohle jsem hledal, díky moc, googlil jsem a nenašel. Sice funguje i ten způsob, který jsem vymyslel já, ale ten váš je lepší.
Díky všem co se zapojili do diskuze a pomohli mi, vážím si vás.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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

0