Autor Zpráva
mattyZEM
Profil
Dobrý večer,

dělám fórum a dostal jsem se k mazání témat (= příspěvků v něm).

Když jsem přemýšlel, jak mazat příspěvky, napadlo mě, jestli by to nešlo udělat nějak jinak, než while()-m.

Používám:
$prispevky=mysql_query("SELECT count(fpid) as pocp,fpuid FROM forum_prispevky WHERE fptema=".$_GET['ftid']." AND fphlavni=0 GROUP BY fpuid");
while($p=mysql_fetch_assoc($prispevky)){
  $updu=mysql_query("UPDATE users SET upocp=upocp-".$p['pocp']." WHERE uid=".$p['fpuid']);
}
(upocp = počet příspěvků)
Dalo by se to nějak takto?
$query=mysql_query("UPDATE users SET upocp=upocp-(SELECT count(fpid) FROM forum_prispevky WHERE fptema=1 GROUP BY fpuid) WHERE uid=fpuid");
- Tento příklad samozřejmě nefunguje, ale jedná se mi právě o to, abych nemusel používat while(), jelikož mi to přijde jako prasárna :).

Předem děkuji.
jsim
Profil
DELETE FROM prispevky WHERE id_tema = 1 
?
mattyZEM
Profil
jsim:
Tomu říkám příklad člověka, který se pokouší radit dřív než si něco přečte. Chápeš, že každý uživatel má v MySQL řádku i sloupec "pocp", tedy počet příspěvků, který se má snížit? V druhém SQL příkazu v [#1] je to snad jasné ;-)

Takto blbý ještě nejsem, abych neznal "DELETE FROM" -.-'
jsim
Profil
V názvu tématu se ptáš na mazání .. tak to laskavě přepiš, protože se v příspěvku ptáš na něco jinyho...
ad, to že sem to nečetl ... jo nečetl, když se ptáš na mazání a já viděl, že tam máš samý UPDATE, tak jsem napsal to co jsem napsal ...
mattyZEM
Profil
Když vidím delší příspěvek, raději se podívám na obsah než pak slepě radím blbiny ;-).

Nemyslím to špatně, jen že mi tímto neporadíš a zbytečně tu je hodně příspěvků :)

Navíc, hned druhá věta je "dělám fórum". Dělat fórum bez znalosti DELETE FROM? To by nebylo fórum ale hnus.
mattyZEM
Profil
Už jsem na to přišel :P stačilo jen za "users" dodat "forum_prispevky" ->

UPDATE users,forum_prispevky SET upocp=upocp-(SELECT count(fpid) FROM forum_prispevky WHERE fptema=1 GROUP BY fpuid) WHERE uid=fpuid


:-)

Moderátor nightfish: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).
jsim
Profil
měl bych dotaz na tebe, zkoušel jsem to vyřešit, protože mi to přišlo docela zajimavy ... ale pokud mám v tabulce příspěvků příspěvky od více lidí, vyhazuje mi to chybu u vnořenýho select u odčítání "Subquery returns more than 1 row", což je logický ... ty ses s tímhle nesetkal a funguje ti to pro více uživatelů, než jednoho?
mattyZEM
Profil
jsim:
ty ses s tímhle nesetkal
Setkal, právě jsem chtěl napsat že tu někde chlapci z NDR udělali chybu :)
AM_
Profil
UPDATE users SET upocp=upocp-(SELECT count(fpid) FROM forum_prispevky WHERE fptema=1 AND fpuid=users.id)

Takhle by to mělo fungovat tak, jak chceš.
Ale zamyslel bych se, jestli má smysl pro každého uživatele uchovávat počet příspěvků (a hlídat si jeho konzistenci), nebylo by jednodušší je pokaždé sečíst (SELECT COUNT) znovu? pokud nemáš v DB statisíce záznamů, nemusíš rychlost tohoto nějak moc řešit.

//edit: v kódu nějak nefunguje [ del ], tabulka forum_prispevky by v UPDATE být neměla, smazal jsem ji tedy
mattyZEM
Profil
Reaguji na AMho:
nebylo by jednodušší je pokaždé sečíst
Nebylo, jelikož nedělám pouze fórum, ale k tomu i web, který má některé funkce, u kterých by toto dost otravovalo (ne rychlostí, ale přehledností).

Za SQL příkaz velmi děkuji :-)

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: