Hei.
myslissäni on table users, jossa on ainakin sarakkeet nick | rahat | jne
TOP listalla 10 eniten rahaa omistavat pelaajat selvitän tälläisellä koodilla
$sql = mysql_query("SELECT * FROM users ORDER BY rahat DESC limit 10");
Miten selvitän 10 vähiten rahaa omistavat? kokeilin jotain order by !rahat, ei se kuitenkaan toiminut..
Toinen kysymys:
miten pystyn laskea kaikkien käyttäjien rahat yhteensä?
tyyliin 'Rahaa käyttäjillä yhteensä $result euroa!'
kiitos vaivautujille :Q
Clacier kirjoitti:
Miten selvitän 10 vähiten rahaa omistavat? kokeilin jotain order by !rahat, ei se kuitenkaan toiminut..
Lajittele listaus nousevaan järjestykseen, eli ORDER BY rahat ASC
.
Clacier kirjoitti:
miten pystyn laskea kaikkien käyttäjien rahat yhteensä?
SELECT SUM(rahat) FROM users;
SELECT COUNT(rahat) AS yhteensa FROMT users
Toimisiko tuo toiseen kysymykseesi?
Muokkaus. trilog ehtikin ensin. Mutta eikös COUNT tee saman kuin SUM, vai laskeeko se kuinka monta rahakohtaa löytyy (perjaatteessa sama kuin laskisi käyttäjien määrän)?
Macro kirjoitti:
Mutta eikös COUNT tee saman kuin SUM, vai laskeeko se kuinka monta rahakohtaa löytyy (perjaatteessa sama kuin laskisi käyttäjien määrän)?
COUNT
laskee tulosrivien lukumäärän, SUM
summaa kentän arvot.
Okei, kiitos molemmille. Kolmas ongelma:
users tablessa on myös sarake ip.
profiiliin olisi tarkoitus saada Samalta osoitteelta: jossa olisi listattuna kaikki muut käyttäjät users tablesta, joilla on sama ip siinä ip sarakkeessa.
Pätkä profiilin koodista (tiedän ettei ole sisennykset kunnossa, ei tarvi mainita):
<?php $getnick = mysql_real_escape_string($_GET["nick"]); $sql = mysql_query("SELECT * FROM users WHERE nick='$getnick'"); $result = mysql_num_rows($sql); if($result == 0) { echo'<h1>Virhe</h1><p>Hakemaasi pelaajaa ei löytynyt!'; } else { $row = mysql_fetch_array($sql); echo '<tr class=profile1><td width=20%><b>Käyttäjätunnus</b></td><td>'; if($row['vip'] == 1) { echo'<img src="images/vip.png"> '; } echo $row['nick'] . '</td></tr>'; echo '<tr class="profile2"><td><b>Tunnus luotu</b></td><td width=80% >' . $row['cdate'] . '</td></tr>'; echo '<tr class="profile1"><td><b>Viimeisin kirjautuminen</b></td><td>' . $row['ldate'] . '</td></tr>'; if($row['clan'] == "") { echo'<tr class="profile2"><td><b>Klaani</b></td><td>Ei klaania</td></tr>'; } else { echo '<tr class="profile2"><td><b>Klaani</b></td><td><a href="klaani.php?nimi=' . urlencode($row['clan']) . '">' . $row['clan'] . '</a></td></tr>'; } echo '<tr class="profile1"><td><b>Rahat</b></td><td>' . $row['rahat'] . '€</td></tr></table>'; echo'<table class="sameip"><tr><td>Samalta osoitteelta: </td><td>' . $samalta . '</td></tr></table>'; } ?>
trilog kirjoitti:
Clacier kirjoitti:
Miten selvitän 10 vähiten rahaa omistavat? kokeilin jotain order by !rahat, ei se kuitenkaan toiminut..
Lajittele listaus nousevaan järjestykseen, eli
ORDER BY rahat ASC
.
Klaanisivulla on seuraavanlainen koodi:
<table class="latest" width="30%" style="border: solid 1px black;"> <caption>Lahjoitukset</caption> <tr class="profile1"><td>Pelaaja</td><td>€</td></tr> <?php include'database/database.php'; $getnimi = mysql_real_escape_string($_GET["nimi"]); $sql = mysql_query("SELECT * FROM clans WHERE name='$getnimi'"); $row = mysql_fetch_array($sql); $sql2 = mysql_query("SELECT * FROM users WHERE clan='$getnimi' ORDER BY lahjoittanut" ); while($row2 = mysql_fetch_array($sql2)) { echo '<tr class="profile2"><td><a href="user.php?nick=' . $row2['nick'] . '">' . $row2['nick'] . '</a></td><td>' . $row2['lahjoittanut'] . '€</tr> '; } ?></table>
Klaanissa Euro on 3 jäsentä; Akkue, Error sekä Jynde.
ylläolevalla koodilla table on seuraavanlainen:
Lahjoitukset
Pelaaja €
Akkue 100.00€
Error 248.00€
Jynde 1022.00€
Miksi ne ovat järjestettynä silti nousevaan järjestykseen? (ilman ASC)
ja miten ne saa järjestettyä laskevaan järjestykseen?
Clacier kirjoitti:
Miksi ne ovat järjestettynä silti nousevaan järjestykseen? (ilman ASC)
ja miten ne saa järjestettyä laskevaan järjestykseen?
ASC on oletus. Käytä sen tilalla DESC, jos haluat laskevan järjestyksen. (Tulevat sanoista ascending ja descending, nouseva ja laskeva)
Clacier kirjoitti:
Miksi ne ovat järjestettynä silti nousevaan järjestykseen? (ilman ASC)
ja miten ne saa järjestettyä laskevaan järjestykseen?
MySQL:n oletuslajitteluperuste on nouseva (ASC), joten sitä ei periaatteessa tarvitse erikseen määritellä. Itse pidän kuitenkin selvempänä, että kyselystä näkee selvästi, missä järjestyksessä tulokset ovat, eikä se riipu mistään oletusasetuksista. (Sitä paitsi jos oletus joskus vaihtuu, on hyvä, että lajitteluperuste on määritelty täsmällisesti.) Laskeva järjestys onnistuu DESC
-määreellä, kuten olit sitä tuolla ensimmäisessä viestissä käyttänytkin.
Clacier kirjoitti:
profiiliin olisi tarkoitus saada Samalta osoitteelta: jossa olisi listattuna kaikki muut käyttäjät users tablesta, joilla on sama ip siinä ip sarakkeessa.
Haluatko siis listata IP-osoitteen perusteella joitakin tietoja? Sehän onnistuu rajaamalla hakujoukosta WHERE
llä haluttu IP.
Suosittelen lukemaan täältä löytyvän hyvän oppaan MySQL:stä ja PHP:stä.
Kokeilin samalta ip systeemiksi:
$ipquery = mysql_query("SELECT nick FROM users WHERE lip = '$row[lip]'"); foreach($row69 = mysql_fetch_assoc($ipquery)) { echo '<a href="' . $row69['nick'] . '">' . $row69['nick'] . '</a> '; }
Parse error unexpected ')' :O
eli odottamaton ), uuh, en käsitä missä..
En tiedä edes tuon toimivuudesta, sillä minusta $row[lip] on vähän hassusti kirjoitettu. Itse olisin laittanut tuonne sen näin: {$row["lip"]}
Muuten, mikä tuo [lip]-tagi on? Tekee sisennyksen. :o
Foreach ei toimi noin, käytä whileä, lisäksi olet kirjoittanut vahingossa $ipqueery.
<?php $ipquery = mysql_query("SELECT nick FROM users WHERE lip = '" . $row['lip'] . "'"); while($row69 = mysql_fetch_assoc($ipquery)) { echo '<a href="' . $row69['nick'] . '">' . $row69['nick'] . '</a> '; }
Tuon pitäisi toimia
-tossu- kirjoitti:
Foreach ei toimi noin, käytä whileä, lisäksi olet kirjoittanut vahingossa $ipqueery.
<?php $ipquery = mysql_query("SELECT nick FROM users WHERE lip = '" . $row['lip'] . "'"); while($row69 = mysql_fetch_assoc($ipquery)) { echo '<a href="' . $row69['nick'] . '">' . $row69['nick'] . '</a> '; }Tuon pitäisi toimia
Joo, kiitos. Yksi "bugi" vielä, jos olet käyttäjän Jorma profiilissa, samalta osoitteelta näkyy "Jorma" + ne muut.. eli se $_GET['nick'] pitäis saada kadotettua siitä samasta osotteelta- kohdasta.
Tarkoitatko, että $_GET['nick']:n ei pitäisi näkyä listassa? Siinä tapauksessa kokeile tätä koodia.
Joo, kiitos. lukkoon vaan
Sen voi tarkistaa jo kyselyssä.
SELECT nick FROM users WHERE lip = '{$row["lip"]}' AND lip <> '{$_GET["nick"]}'
Macro kirjoitti:
SELECT nick FROM users WHERE lip = '{$row["lip"]}' AND lip <> '{$_GET["nick"]}'
Tuossa koodissa on turva-aukko. Koskaan ei pidä liittää käyttäjän syötteitä (mm. $_GET tai $_POST) tietokantakyselyyn suoraan tuolla tavalla. Lisätietoja löytyy esim. mysql-oppaista.
Niin totta vie onkin. Korjataan se mysql_real_escape_string()-funktiolla.
Eikös tuo Macron SQL-kysely ole muutenkin väärin? Tämän pitäisi toimia.
<?php mysql_query("SELECT nick FROM users WHERE lip = '" . $row['lip'] . "' AND nick <> '" . mysql_real_escape_string($_GET['nick']) . "'");
Aihe on jo aika vanha, joten et voi enää vastata siihen.