ugrás a tartalomhoz

Fórum postok "szálkövetett(?)" nézet

DonPepito · 2009. Már. 3. (K), 20.02
Üdv!

A weblabor fórumához hasonló fórumot készítek. A hozzászólásokat ehhez hasonlóan szeretném megjeleníteni, vagyis az adott hozzászólásra érkezett választ néhány pixellel bentebb kezdeni.

A postokat tároló tábla jelenleg így néz ki:

CREATE TABLE IF NOT EXISTS `forum_posts` (
  `id` int(11) NOT NULL auto_increment,
  `post` text NOT NULL,
  `created_by` int(11) NOT NULL COMMENT 'user_id',
  `created_date` datetime NOT NULL,
  `parent_topic_id` int(11) NOT NULL,
  `sub_topic_id` int(11) NOT NULL,
  `level` int(11) default '0',
  `order` text NOT NULL,
  `active` tinyint(4) default '1',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Az order mező szerint szerettem volna a lekérdezést rendezni, az order mezőt így állítom össze:

Ha általános hozzászólás (nem válasz), akkor az üzenet id-je kerül bele. Ha válaszról van szó, akkor a "szülő" hozzászólás id-je, plusz _ és az aktuális hozzászólás id-je.

Így néz ki:

id     post                  order
----------------------------------
1      test                      1
2      test-re valasz          1_2
3      test-re masik valasz    1_3
3      2-es id-jure valasz     2_3
Viszont az ORDER BY nem natural order, így pl. a 4_2_13 és 4_2_2 esetében nem jó a visszakapott eredmény.

"Kissé" gány módszer és nem is működik, ezért szeretnék ötleteket, tanácsokat kérni.

Előre is köszönöm.
 
1

Ne tégy több adatot egy mezőbe!

N0r3i · 2009. Már. 3. (K), 20.55
A fenti szabályt már sok százszor elmondták itt is, csak ismételni tudom. Legyen egy meződ az azonos hozzászólásra érkezett válaszok sorrendjére, és egy másik, hogy az a válasz, melyik hozzászólásra érkezett.
Ha megfigyeled a saját példád, jól látszik, hogy ha az order meződet a '-' mentén 2 mezőre bontod, minden problémád megoldódik!

Norbi
2

Ismerem a szabályt, de nem

DonPepito · 2009. Már. 3. (K), 21.43
Ismerem a szabályt, de nem tudtam megkerülni, ezért érdeklődtem jobb módszer(ek) iránt.
A példám nem teljeskörű, mert mi van pl. ebben az esetben:

id     post                  order  
----------------------------------  
1      test                      1  
2      test-re valasz          1_2  
3      test-re masik valasz    1_3  
4      2-es id-jure valasz     2_3
5      4-es id-jure valasz   2_3_5
6      5-os id-jure valasz 2_3_5_6
Vagyis a válasz-ra válaszoltak, majd arra is válaszoltak, stb. Tehát nemcsak két szintű a dolog, hanem akármennyi, így már a "-" mentén nem tudom két mezőre bontani.

[szerkesztve]
A te módszereddel el tudnám ugyan tárolni, de nem tudom, hogyan tudnám sorrendben lekérdezni.
6

Tulajdonképpen kétszintű...

N0r3i · 2009. Már. 4. (Sze), 10.47
... ha úgy gondolkodsz, hogy a 4-esre adott válasz 4_1, az 5-ösre pedig 5_1, a behúzás mértékét pedig a rekurzió mélysége adja meg.
Innét adott a válasz a kérdésedre is: rekurzióval tudod sorrendben kiolvasni az adatokat.

Még annyi baja van a Te megoldásodnak, hogy előbb-utóbb elfogy az order mező szélessége: lásd a 698245-ös hozzászólásra adott néhány hozzászólás :-)
7

Igazad van

DonPepito · 2009. Már. 4. (Sze), 13.47
Ez az ötlet nem volt túl jó. :) Viszont a rekurziót mindenképpen szeretném elkerülni (több ezres hozzászólásnál elég időigényes lehet), tehát egyelőre marad a Poetro által javasolt megoldás.

Köszönöm!
3

. (pont)

Poetro · 2009. Már. 3. (K), 21.43
Használd inkább a .-ot az _ helyett es mindegyik vegere rakj egy /-t

1/
1.1/
1.1.1/
1.2/
2/
Lásd például: comment_render és comment_save a mentéshez
8

Köszi neked is

DonPepito · 2009. Már. 4. (Sze), 13.58
A linkelt függvényeket még nem néztem át, az ötleted kipróbáltam és működik, kis módosítással:

Véletlenül benne maradt a / jel a hozzászólás mentéskor, és ilyen stringek keletkeztek:

2/.4/.7/.8/.9/
2/.4/.7/.8/.9/.10/
...
1/.20/.21/.22/
És így működik, ha a / jel csak a végén szerepel, kicsit másképpen viselkedik.

[szerkesztve]
Hülyeséget írtam, a fenti tárolás nem ad helyes eredményt, de az általad javasolt már tökéletesen működik.
4

Hierarchikus adatmodell

fchris82 · 2009. Már. 4. (Sze), 00.32
Ajánlom figyelmedbe ezt: Hierarchikus adatkezelés SQL-lel PHP-ben II. Ez KELL neked.
5

Köszönöm

DonPepito · 2009. Már. 4. (Sze), 08.51
Átnézem ezt is.