Egyéni rendezési sorrend
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!
■ 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!
usort
itt nezz korul
Ez sajna az én esetemben nem válik be...
el is kell tárolni
Helyes! :)
Láncolt lista
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.
Hasonlóra gondoltam én is...
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! :))
Custom collation
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
sorting mező?
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
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
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...