Autor Zpráva
chosenek
Profil *
Dobrý den,
mam php forum a chci v něm používat reakce (reakce se umisti pod přizpěvek na něž bylo ragovano)

vytvořil jsem si tabulku:

messages (
msgId int not null AUTO_INCREMENT PRIMARY KEY,
msgText text,
msgName varchar(20),
msgDate varchar(20),
msgReact varchar(20) default -1,
msgNumReact varchar(20) default 1,
msgTopicId int)

Kde msgReact reprezentuje msgId zprávy na kterou se reaguje a msgNumReact je počet přizpěvku na danou zpravu.

když nějkdo zareguje do nově vytvořené zprávy se nastaví msgReact jako msgId reagované zprávy a msgNumReact se inkrementuje. Takže třeba 3tí reakce by měl již msgNumReact 4.
S tím že odsazení ragujících přízpevku mam zajištěno pomocí dynamické css v zavislosti na msgNumReact.

Snažím se to vypisovat pomocí left join takhle:

SELECT a.msgId as msgId,a.msgText as msgText,a.msgName as msgName,a.msgDate as msgDate,b.msgReact as msgRect,b.msgNumReact as msgNumReact FROM messages as a LEFT JOIN messages as b ON a.msgId = b.msgReact WHERE a.msgTopicId = '" . $_SESSION['topicId'] . "' ORDER BY a.msgId DESC


Pokud reaguju na přízpěvek tak se mi odsadí pravě ten přízpěvek na ktery jsem reagoval a ten nový (reakce) se mi umístí na začátek (jako kdybych napsal novy přizpěvek). V mySql nejsem zběhlý a tak problem bude v tom selectu ale ať jsem to zkoušel jakkoliv tak prostě si nemužu pomoct ale nejede to tak jak má,

Pokud víte jak jinak zařídit reakce (třeba načtení do pole plus nějak ho setřídit podle msgId a msgReact a pak to vypsat, nebo nějak pomocí unionu? ) tak byl bych vděčný za pomoc.



Děkuju za případné odpovědi, chosenek
Alphard
Profil
mrkni sem pro inspiraci, jak se to dá řešit jinak, na tvou tabulku to ale asi nesedne
http://php.vrana.cz/traverzovani-kolem-stromu-prakticky.php
Kajman_
Profil *
Možná bych přidal sloupeček s pozicí v rámci jedné zprávy.

Tu bych u nového nastavil
- pokud není rekací na jinou - na maximum v tabulce + 1
- jinak - vycucnul pozici, na kterou se reaguje, všechny větší v tabulce bych zvětšil o jedna a nové dal tu získanou pozici +1, která se uvolnila (nebo nikdy nebyla)

A ten sloupeček dejte číselný typ. Vypadá to, že ze záhadného důvodu dáváte čísla do řetězce, ale tam by se to špatně řadilo.
Mastodont
Profil
msgReact reprezentuje msgId zprávy na kterou se reaguje

A proč tedy máš msgId jako typ int a msgReact jako typ varchar?
Mastodont
Profil
odsazení ragujících přízpevku mam zajištěno pomocí dynamické css v zavislosti na msgNumReact

To je dost neobvyklé řešení, normálně se odsazuje do úrovní ne podle počtu příspěvků, ale na (úroveň příspěvku, na který reaguji + 1), čili jak radí Kajman.
chosenek
Profil *
tak už jsem to vyřešil diky moc :-)
Toto téma je uzamčeno. Odpověď nelze zaslat.