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:
  1. CREATE TABLE IF NOT EXISTS `forum_posts` (  
  2.   `id` int(11) NOT NULL auto_increment,  
  3.   `post` text NOT NULL,  
  4.   `created_by` int(11) NOT NULL COMMENT 'user_id',  
  5.   `created_date` datetime NOT NULL,  
  6.   `parent_topic_id` int(11) NOT NULL,  
  7.   `sub_topic_id` int(11) NOT NULL,  
  8.   `levelint(11) default '0',  
  9.   `order` text NOT NULL,  
  10.   `active` tinyint(4) default '1',  
  11.   PRIMARY KEY  (`id`)  
  12. ) 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:
  1. id     post                  order  
  2. ----------------------------------  
  3. 1      test                      1  
  4. 2      test-re valasz          1_2  
  5. 3      test-re masik valasz    1_3  
  6. 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:
  1. id     post                  order    
  2. ----------------------------------    
  3. 1      test                      1    
  4. 2      test-re valasz          1_2    
  5. 3      test-re masik valasz    1_3    
  6. 4      2-es id-jure valasz     2_3  
  7. 5      4-es id-jure valasz   2_3_5  
  8. 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:
  1. 2/.4/.7/.8/.9/  
  2. 2/.4/.7/.8/.9/.10/  
  3. ...  
  4. 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.