Autor Zpráva
Duchaplny
Profil
Zdravím,

vytváram jednoduché fórum a narazil som na 2 problémy. Pri každom príspevku užívateľa by som chcel viesť jeho celkový počet príspevkov. Okno s príspevkami, kde chcem viesť ten počet, vyzerá nejak takto (miesto údajov v úvodzovkách sú pravé údaje):
"Meno"                       | "Názov vlákna"
Príspevky: "počet"           | 
Dátum registrácie: "dátum"   | "TEXT príspevku"
Bydlisko: "bydlisko"         |
MySQL tabulka so záznamami príspevkov:
id | id_prispevku | id_uzivatela
 1 |       1      |      1
 2 |       1      |      3
 3 |       2      |      1
 4 |       3      |      1
1. Problém nastáva pri súčte príspevkov podľa užívateľa, resp. pri jeho triedení. Nezáleží na tom k akému príspevku sa vyjadruje, zaujíma ma len celkový počet. V tomto prípade by to bolo: užívateľ 1=3, užívateľ 2=0, užívateľ 3=1.
Ako by som toto docielil v SQL ?
V inej tabuľke ukľadám stĺpec "zobrazenia", ktorý v podstate funguje tak, že ak dám zobraziť tému, tak sa počet zobrazení zvýši o +1:
if (isset($temaID))
   {mysql_query ("UPDATE forum SET zobrazenia=zobrazenia +'1' WHERE id='$temaID'", $GLOBALS["result"]);}
2. Problém je, že ak podržím F5, tak mi počet zobrazení narastie o veľké číslo a stĺpec "zobrazenia" bude veľmi skreslený. Ako by som to mohol zabezpečiť ?
Someone
Profil
1. $sql = mysql_query("SELECT COUNT(*) FROM prispevky WHERE prispevky.id_uzivatela = '1'");
    $celkem = mysql_result($sql,0);
    echo $celkem;
2. Použil bych nějaký časový interval pro zobrazování, při zobrazení zkontroluj zda existuje daná COOKIE a pokud ne, přičti 1 do sloupce zobrazenia a vytvoř COOKIE.
Duchaplny
Profil
Someone:
1. toto rieši situáciu pre jedného užívateľa, ktorému "natvrdo" zadám ID. Ostatní sa počet svojich príspevkov nedozvedia = zlé riešenie.
2. s COOKIES som ešte nerobil, ale mrknem na to.
Someone
Profil
Duchaplny:
1. Proč by se ostatní nedozvěděli svůj počet příspěvků?
edit: Předpokládám, že se jedná o přihlášené uživatele. Stačí při přihlášení uložit Id uživatele do session a pak pozměnit SQL na:
$sql = mysql_query("SELECT COUNT(*) FROM prispevky WHERE prispevky.id_uzivatela = '".$_SESSION['id_uzivatele']."'");
Duchaplny
Profil
Someone:
nn, takto to viem urobiť aj ja, ale to nie je to, čo chcem.

Na tomto fóre máš pod menom link na "Profil" a predstav si, že pod ním by každý mal počet príspevkov. Keby som to riešil cez $_SESSION, tak by si mal rovnaký počet príspevkov ako každý užívateľ, pretože by si u všetkých videl ten svoj. Ja práve chcem, aby to zobrazovalo každému užívateľovi jeho vlastný počet bez ohľadu na to, či je online abo offline. Napr.:
Someone               | [#4] - Zasláno....
Profil                |
Počet príspevkov: 376 | "TEXT"
Duchaplny             | [#5] - Zasláno....
Profil                |
Počet príspevkov: 124 | "TEXT"
Someone
Profil
Jména musíš nějak vypisovat, pokud budeš mít 2 tabulky: 1 s uživateli a jednu s příspěvky tak ty uživatele musíš nějak vypsat:

Tabulka s uživateli
ID | USERNAME
-------------------
1  | Someone
2  | Duchaplny
Tabulka s příspěvky
ID_PRISPEVKU | ID_UZIVATELE
-------------------
 1       |       1
 2       |       1
 3       |       2
while ($vysledek=mysql_fetch_assoc(mysql_query("SELECT * FROM uzivatele"))) {
    echo "Jmeno: ".$vysledek['username'];
    $pocet_prispevku = mysql_result(mysql_query("SELECT COUNT(*) FROM prispevky WHERE prispevky.id_uzivatele='".$vysledek['id']."'"),0);
    echo "Počet příspěvků: ".$pocet_prispevku;
}
Duchaplny
Profil
Someone:
j vidíš, toto ma nenapadlo dať to do while. Díky moc.
btw: k tej 2. COOKIES sa dajú vypnúť, čo sa mi moc nepozdáva. Nenapadá ťa ešte iné riešenie ?
Someone
Profil
To je stejný problém jako s počítadlem přístupů, nemůžeš to udělat podle IP, protože více lidí může mít stejnou IP, takže přijdeš o nějaké přístupy, zase na druhou stranu někdo může promazávat COOKIES takže tam zase budeš mít nějaké ty přístupy navíc. Počítat přístupy jen registrovaných je taky nevyhovující. Takže to chce najít nějaký ten kompromis. Já osobně používám cookies, ale to už je na tobě co použiješ.
Duchaplny
Profil
ja som premýšľal nad stĺpcom DATETIME a funkciou now(), ale je to +ďalší stĺpec a príde mi to trochu zbytočné..
Popremýšľam ešte nad tými COOKIES, príp. to skúsim v testovacej prevádzke. Ide hlavne o to, aby ten počet tak rapídne nestúpal pri držaní jednej klávesy.
Duchaplny
Profil
[#6] Someone
mám tu taký problém s tým scriptom. Skúšal som priamo ten tvoj a spraví mi to, že sa mi stránka snaží načítať obsah, ale nenačíta, akoby bola zacyklená. Neviem, či je to chyba servera alebo chyba v tom scripte, ale nefunguje mi to.

Keď som to skúšal iným spôsobom (while, endwhile), tak som dosiahol počet príspevkov, ale pre všetkých užívateľov bez nejakého rozumného rozdelenia, takže opäť náraz do steny.
Bubák
Profil
Pak je tu ještě problém s Chrome, protože si stránky (články) přednačítá.
Someone
Profil
Duchaplny:S tím jsem měl taky problém a k mému údivu to způsobovalo to, že jsem v mysql_fetch_assoc neměl proměnnou ale rovnou celé query. Zkus to takto:
$uzivatele_sql = mysql_query("SELECT * FROM uzivatele");
while ($vysledek=mysql_fetch_assoc($uzivatele_sql)) {
    echo "Jmeno: ".$vysledek['username'];
    $prispevky_sql = mysql_query("SELECT COUNT(*) FROM prispevky WHERE prispevky.id_uzivatele='".$vysledek['id']."'");
    $pocet_prispevku = mysql_result($prispevky_sql,0);
    echo "Počet příspěvků: ".$pocet_prispevku;
}
Duchaplny
Profil
Bubák:
Chrome nepoužívam. Idem cez FF, keď všetko dorobím, mrknem to ešte v IE a v Opere.

Someone:
j toto už funguje bez zacyklenia. Akurát mi to vypíše opäť všetkých vedľa seba. Takže príklad by vyzeral následovne:
Someone                    | [#4] - Zasláno....
Profil                     |
Počet príspevkov: 376, 124 | "TEXT"
Duchaplny                  | [#5] - Zasláno....
Profil                     |
Počet príspevkov: 376, 124 | "TEXT"
Chcelo by to nejakým kľúčom rozdeľovať, aby sa to dalo použiť pre každého zvlášť.
Someone
Profil
Duchaplny:
[#12] Funguje tak jak má, viz: http://dancharousek.php5.cz/tester/pocet_prispevku.php
Duchaplny
Profil
Someone:
možno to mám len zle rozvrhnuté, bo tam toho mám viac.. ukážeš mi pls celý script ?
Someone
Profil
<?php
  $uzivatele_sql = mysql_query("SELECT * FROM uzivatele");
  echo "
  <table style='text-align: center; font-family: cursive;'>
      <tr style='background: #d3d3d3;'>
          <td>Uživatel</td>
          <td>Počet příspěvků</td>
      </tr>
  ";
  while ($vysledek=mysql_fetch_assoc($uzivatele_sql)) {
    echo "
        <tr>
            <td>".$vysledek['username']."</td>
    ";
    $prispevky_sql = mysql_query("SELECT COUNT(*) FROM prispevky WHERE prispevky.id_uzivatele='".$vysledek['id']."'");
    $pocet_prispevku = mysql_result($prispevky_sql,0);
    echo "
            <td>".$pocet_prispevku."</td>
        </tr>
    ";
  }
  echo "</table>";
?>
Duchaplny
Profil
Someone:
mal som predsa len zle rozvrhnuté.. díky moc, už to funguje..

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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