Különböző ORDER BY fontossági sorrendje
2021-04-16T17:08:02+02:00
2021-05-02T09:43:23+02:00
2022-08-12T02:25:30+02:00
tivisu
Egy érdekes kérdés merült fel az adatok adatbázisból való visszaolvasásakor nálam.

Az adabázisból az adott sorrend szerint kellene visszaolvasni az adatokat.

SELECT * FROM `tabla` ORDER BY `sorrend` ASC

A `sorrend` oszlop az adatbázisban INT(11), alapértéke 1

Egy "DragnDrop" ajax script-el bármikor megváltoztathatom a "sorrend" értékét 1-től X-ig (X - a adatbázis aktuális utolsó rekordja)

De mi van akkor, amikor csak töltik az adatbázist és csak néha változtatják a sorrendet, vagyis, ha 10 napig töltik, naponta 1 rekordot, akkor gyakorlatilag az utolsó sorrendváltoztatás után 11 db 1-es értékű számom lesz a `sorrend` oszlopban. - Akkor most melyik a valódi első (1)? Arra gondoltam, hogy ehhez még valami meghatározás kéne, de mi? Mert ha 10 db 1-es van, akkor meddig az az 1-es az első, amit én meghatároztam 1-esként? Legjobb megoldásnak azt találtam, hogy ezt nemigazán lehet automatizálni, hanem valami módon azt mondani, hogy mostmár nem ez az "első", de mi alapján az 1-es az első?

Sajnos bonyolult nekem...
S nektek,
Hogyan lehet visszaolvasni a
rekordot elsőként az adabázisból milyen a legegyszerűbb mehatározás?
Mutasd a teljes hozzászólást!
Most a sorrend mezők egyezhetnek a különböző rekordokban, a következő lehetőségeket látom:
1. be kell vonni más mező(ke)t is az rendezésbe
2. el kell fogadni, hogy az lesz a sorrend, ahogy a DB éppen felköhögi a szelektáláskor
3. nem szabad engedni, hogy a sorrend mezők egyezzenek

Az 1. esetben csak a megrendelőd tud segíteni.
A 2. esetben nem kell tenni semmit (gondolom ez a mostani működés).
A 3. esetben beszúráskor meg kell nézni, hogy mi a max sorrend, hozzábiggyeszteni 1-et és úgy insertálni.
Mutasd a teljes hozzászólást!

  • El kell dönteni, hogy azonos érték esetén mi alapján rangsoroljon. Felvehetsz egy IDENTITY, vagy TIMESTAMP mezőt és akkor a 'sorrend' és azon belül új adatmező szerint rendezel (ORDERBY sorrend, adatmező2). Ezt neked kell eldöntened, vagy a megrendelőnek.
    Mutasd a teljes hozzászólást!
  • pl a "sorrend" 1 addig érvényes, amíg a sorrend meghatározásakor megadott "dátum" nem kevesebb 2 nappal az adott dátumtól? Viszont, ahogy mondtad is, szerintem a megrendelőnek kell megadnia, h meddig az első az első, mert különben lehet "filozofálni", hogy hogy is működjön...:)
    Mutasd a teljes hozzászólást!
  • Most a sorrend mezők egyezhetnek a különböző rekordokban, a következő lehetőségeket látom:
    1. be kell vonni más mező(ke)t is az rendezésbe
    2. el kell fogadni, hogy az lesz a sorrend, ahogy a DB éppen felköhögi a szelektáláskor
    3. nem szabad engedni, hogy a sorrend mezők egyezzenek

    Az 1. esetben csak a megrendelőd tud segíteni.
    A 2. esetben nem kell tenni semmit (gondolom ez a mostani működés).
    A 3. esetben beszúráskor meg kell nézni, hogy mi a max sorrend, hozzábiggyeszteni 1-et és úgy insertálni.
    Mutasd a teljes hozzászólást!
  • Elmondtam a válaszaitokat a megrendelőnek, elsősorban örülök, hogy megértettétek, amit kérdeztem, aztán, hogy én is megértettem, aztán hétfőre be lettem rendelve megbeszélésre, mert nekik is ez új, erre nem is gondoltak. Jelentkezem a megbeszélés után,
    Üdv,
    T
    Mutasd a teljes hozzászólást!
  • Van egy ötletem, az pedig az, hogy a sorrend változtatás után, de lényegében akármikor, egy "abszolut első" oszlopot hozok létre, ami mondjuk a bevitt dátum után érvényét veszti. Tehát lehet 20 db 1-es is a sorrendben, ha az "abszolut első" az első az aktuális dátumon. Holnap már nem "látszik".
    Mondjuk ezt még jó volna tudnom, hogy hogy néz majd ki a mysql visszaolvasásában :)

    Viszont már azt is megtudtam, hogy komplikálódik majd ez a dolog. Még részletesebb visszaolvasás kell majd, de ezt majd holnap  tudom meg. Egyelőre arra lennék kiváncsi, hogy az "abszolút első" dátum meghatározással szeritnetek ok lenne-e?

    Előre is köszönöm,
    T
    Mutasd a teljes hozzászólást!
  • Most lehet, hogy én vagyok hülye és nem értem, akkor előre is elnézést.

    Miért van ez ennyire túlbonyolítva? Arról van szó, hogy ha van x számozott rekordod, és bekerül egy új rekord, akkor az milyen számozást kapjon?

    A 'sorrend' oszlopod legyen automatikus inkrementált (auto increment), így minden új rekord az utolsó számozott rekord 1-el növelt értékekét megkapja és dragndrop-ban bekerül a lista végére. Az sorrend módosítható simán bármikor, az auto increment onnan folytatja az új rekordok számozását, ahol abbahagyta az utolsót.
    Mutasd a teljes hozzászólást!
  • A megrendelők nem tudtak dűlőre jutni, így az a verzó maradt, amit én ajánlottam, "abszolut első" lesz majd az első, ami azt jelenti, hogyha az "abszolut első" 1-esnek van jelölve akkor az az az első helyen van az aktuális dátumig.

    SELECT `aktualis_elso`, `datum` FROM `tabla` WHERE `datum` >= CURDATE() AND `aktualis_elso` = "1"
    Köszönöm a segítségeteket és az ötleteket.
    T
    (Nem tudom, hogy kinek adjam a pontokat, mindenki válasza segítség volt.)
    Mutasd a teljes hozzászólást!
  • Nos, valakinek a megoldását el kell fogadnom, viszont az egésznek a végeredménye az lett, hogy nem tudtak dűlőre jutni a megrendelők, hogy hogyan működjön a sorrend "automatikusan", így egy szerkesztőre lesz rábízva, hogy naponta kiválasztott 10 hír sorrendjét határozza majd meg.
    Így az marad, hogy 10 hír be lesz kapcsolva és "DragNDrop"-al pedig meghatározza a sorrendet minden nap.
    A "bonyolításból" így, szerencsére, egy egyszerű megoldás lett.

    Azért köszönöm a segítségeteket, ötleteiteket.

    Üdv.,
    T
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd