ugrás a tartalomhoz

Egyéni rendezési sorrend

reptile27 · 2010. Jan. 27. (Sze), 02.34
Sziasztok!

A témának két része van PHP és MySQL. Mindkét része érdekelne.
Ki hogy oldaná meg vagy tudtok-e ilyen megoldásokról?

Az szeretném megtudni hogy egyedi rendezést hogyan tudok megvalósítani egy adott listában?

Pl: van egy listám... A - Z-ig.

Azt meg tudom oldani, hogy MySQL lekérdezésnél ABC szerinti vagy fordított sorrendbe rendeződjenek az adatok, de mi a helyzet akkor ha a rendezést én akarom meghatározni...?

Mondjuk a kimenetnél fel-le nyilak segítségével.

sort_highest: Az elejére
sort_higher: Eggyel feljebb
sort_lower: Eggyel lejjebb
sort_lowest: Az aljára

Például a "D" kerüljön az "A" elé, a "B" a "K" után, a "H" a sor legvégére a "Z" a legelejére stb...

Tehát érdekelne hogyan készítenétek el az adott táblát SQL-ben milyen lenne a szerkezeti felépítése? Valamint a PHP része hogyan módosítaná a tábla tartalmát hogy
a beállított sorrend meg is maradjon?

Nem tudom mennyire érthető amit kérdezek? Remélem igen. :S

Nem azt várom hogy megírjátok a kódot, csak ötleteket várok, mert amire én gondoltam az szerintem nem válik be.

Előre is köszi a segítséget!
 
1

usort

Chaar-Lee · 2010. Jan. 27. (Sze), 08.12
nem tudom, hogy MySQL-ben van-e erre lehetoseg, de PHP-ban van. az usort, uasort es uksort fuggvenyeknek meg kell adni a comparator fuggvenyt parameterkent es maris ugy rendez, ahogyan te szeretned.

itt nezz korul
6

Ez sajna az én esetemben nem válik be...

reptile27 · 2010. Jan. 29. (P), 14.16
Ez sajna az én esetemben nem válik be. Azért köszi a segítséget! :)
2

el is kell tárolni

zzrek · 2010. Jan. 27. (Sze), 10.55
Az egyéni sorrendet el is kell tárolni. Ha a sorrend felhasználónként ugyanaz, akkor lehet magába a táblába rakni egy plusz (numerikus) mezőt, ami a sorrendet tartalmazza. Ha felhasználónként különbözik, akkor külön tábla kell, ami tartalmazza hogy melyik felhasználónak melyik azonosítójú rekord hányadik a sorban.
7

Helyes! :)

reptile27 · 2010. Jan. 29. (P), 14.17
Úgy ahogy mondod! Köszi! :))
3

Láncolt lista

deadcode · 2010. Jan. 27. (Sze), 10.59
Hirtelen a láncolt lista névre hallgató absztrakt adatszerkezet jutott eszembe, itt van egy kis info, hogy miről is van szó:

http://en.wikipedia.org/wiki/Linked_list

Ezen a módon tárolt adatokat MySQL-ben az ORDER segítségével nem lehet ugyan rendezni, de PHP-ben, ha a memória nem probléma (vagy van elég, vagy nincs túl sok adat), szóval elfér minden sor a memóriában, akkor elég egyszerű.

Egyirányú saját sorrend felállításához minden rekordhoz 1 extra mező szükséges, a következő rekord ID-je. Kétirányú sorrendhez nyilván 2 extra mező, bár 1-el is meg lehet oldani -- a másik extra mezőben értelemszerűen az előző rekord ID-je.

Új elem hozzáadására, elem törlésére és a sorrend megváltoztatására már a wikipedia cikkben is van algoritmus, de elég magától értetődő a dolog amúgy.

Én régebben hasonló problémával kerültem szembe, pl. galéria adminban képek tetszőleges sorrendbe rendezése. Úgy oldottam meg, hogy 1 extra mezőben volt a sorrend felállítva simán egész számokból, minden rekordnak volt egy helye a sorban, és ezeket cserélgettem, mikor két elem helyet cserélt. Ennek az volt az előnye, hogy simán MySQL-ben rendezhető volt az adat, ami a LIMIT miatt nem is rossz dolog. A láncolt lista viszont tisztább megoldásnak tűnik.
5

Hasonlóra gondoltam én is...

reptile27 · 2010. Jan. 29. (P), 14.14
Sziasztok mindenkinek köszönöm a válaszokat! :)

Igen, én is valami hasonlóra gondoltam, hogy számokból áll a sorrend és gondoltam növelem vagy csökkentem az értékét 1-el, de az problémás lett volna. Ezért is vetettem el, de azt hiszem a te megoldásod be fog válni.

Még 1x köszönet! :))
4

Custom collation

gphilip · 2010. Jan. 27. (Sze), 18.28
Szia!

A mysql-ben lehetőség van egyéni collation létrehozására. A collation az a definÍció, ami meghatázotta a stringek rendezési sorrentjét illetve azt, hogy mikor tekintünk két stringet egyenlőnek. Pl az utf8_hungarian_ci collation használaa esetén az á és az a ugyanaz, a nagy A és kicsi a is. Továbbá a rendezés a szokványos ABC szerint történik.

Ha egyéni collationt hozol létre, akkor ezeket a szabályokat felülÍrhatod.

http://forge.mysql.com/w/images/b/b7/HowToAddACollation.pdf
8

sorting mező?

h31st · 2010. Feb. 5. (P), 15.03
én bevezetném a sorting mezőt, amiben az elemek sorrendje van (zzrek)
1el feljebb rakni: megcserélni a sortingját azzal a sortinggal, ami kisebb nála
beszúrásnál lehetőleg gondoskodni kell arról, hogy egyéni sorting értéket kapjon, ez problémás, a mögötte levő elemeknek növelni kell a sortingját...
így akár fa struktúra elemeit is szépen rendezni lehet, pl
1 gyümölcsök
   2 alma
   3 banán
   4 szilva
5 zöldségek
   6 karalábé
   7 paradicsom

de persze nem kell folytonosnak lennie a számozásnak, és a fastruktúrát sem a sortinggal kell meghatározni, a következőnek is ugyanazt kell adnia
10 gyümölcsök
   9 alma
  89 banán
  99 szilva
11 zöldségek
   6 karalábé
   7 paradicsom

ezzel már adatbázisból megfelelően rendezve kaphatod a sorokat
az egyéni collation vagy php-s rendezés nem arra van, hogy mozgatni is tudd az elemeket, hanem ha pl fixen át akarod rendezni az abc-t... a láncolt lista jó amúgy, de csak emiatt valszeg felesleges...