Eredmény: 1 - 10 (10) összesen

Téma: MySQL rekord rendezés

  1. #1
    Tag
    Csatlakozott
    10-09-06
    Hozzászólás
    53
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás MySQL rekord rendezés

    Sziasztok!

    Adott egy sql táblám, amibe a honlapra feltöltött képek adatait tárolom. A tábla kinézete:
    id - INT(11) / elsődleges kulcs, egyedi, index, auto_increment
    kep_nev - TEXT
    comment - TEXT
    Album_ID - INT
    date - timestamp

    Ahogy töltöm fel a képeket, az id szépen növekszik. Viszont ha köztes rekordot törlök, akkor egy olyan probléma merül fel, hogy a következő adat amit felviszek, az a törölt helyére kerül, és így a kiíráskor nem jó sorrendbe kerül.

    pl:
    1 proba1.jpg proba 2 2010-03-13
    2 proba2.jpg proba 2 2010-03-13
    3 proba3.jpg proba 1 2010-03-13

    kitörlöm a 2 idéjű rekordot, majd felveszek egy újat. Utána így néz ki a tábla:
    1 proba1.jpg proba 2 2010-03-13
    4 proba4.jpg proba 2 2010-03-13
    3 proba3.jpg proba 1 2010-03-13


    Az ORDER BY rendezést sajnos nem lehet alkalmazni mert LIMIT is szerepel az sql kérésben.
    Hogy lehet úgy rendezni a táblát, hogy az id-k rendesen a helyükre kerüljenek sorrendben?
    Előre is köszönöm a segítséget!



  2. #2
    MinderBinder edem logója
    Csatlakozott
    09-09-02
    Hely
    Budapest
    Hozzászólás
    1.093
    Thanked 1 Time in 1 Post

    Alapbeállítás re: MySQL rekord rendezés

    Én azt csinálnám a helyedben, hogy betennék egy timestamp mezőt. Nálam created_at és updated_at szokott lenni.

    Nálad ez most nem működik, de lehet "szimulálni" visszamenőleg. Én azt csinálnám, hogy írnék egy kis algoritmust, ami beállít az id alapján timestamp-okat a mezőidnek. Igaz, hogy nem akkor lett feltöltve, de utána tudsz ltérehozás dátuma alapján sorrendbe rendezni.

    Egy másik megoldás, hogy beteszel egy "position" mezőt, ami csak egy szám, ami alapján beállíthatod hogy hanyadik helyen legyen az adott rekordod.


    // Only illogics can find
    // hidden flaws in a straight logic line

  3. #3
    Music Addict speeedfire logója
    Csatlakozott
    10-05-19
    Hely
    Győr
    Hozzászólás
    446
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: MySQL rekord rendezés

    Idézet thelol eredeti hozzászólása Hozzászólás megtekintése
    Sziasztok!

    Adott egy sql táblám, amibe a honlapra feltöltött képek adatait tárolom. A tábla kinézete:
    id - INT(11) / elsődleges kulcs, egyedi, index, auto_increment
    kep_nev - TEXT
    comment - TEXT
    Album_ID - INT
    date - timestamp

    Ahogy töltöm fel a képeket, az id szépen növekszik. Viszont ha köztes rekordot törlök, akkor egy olyan probléma merül fel, hogy a következő adat amit felviszek, az a törölt helyére kerül, és így a kiíráskor nem jó sorrendbe kerül.

    pl:
    1 proba1.jpg proba 2 2010-03-13
    2 proba2.jpg proba 2 2010-03-13
    3 proba3.jpg proba 1 2010-03-13

    kitörlöm a 2 idéjű rekordot, majd felveszek egy újat. Utána így néz ki a tábla:
    1 proba1.jpg proba 2 2010-03-13
    4 proba4.jpg proba 2 2010-03-13
    3 proba3.jpg proba 1 2010-03-13


    Az ORDER BY rendezést sajnos nem lehet alkalmazni mert LIMIT is szerepel az sql kérésben.
    Hogy lehet úgy rendezni a táblát, hogy az id-k rendesen a helyükre kerüljenek sorrendben?
    Előre is köszönöm a segítséget!
    Már miért ne lehetne a limit mellett egy desc vagy asc?

    pl:

    Kód:
    select * from kepek
    ORDER BY  id ASC //vagy DESC attól függ mi kell neked és megvan a limit is
    LIMIT 0 , 30  // a 30-at meg átírod annyira amennyire neked kell és kész




  4. #4
    Tag
    Csatlakozott
    10-09-06
    Hozzászólás
    53
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: MySQL rekord rendezés

    Idézet speeedfire eredeti hozzászólása Hozzászólás megtekintése
    Már miért ne lehetne a limit mellett egy desc vagy asc?

    pl:

    Kód:
    select * from kepek
    ORDER BY  id ASC //vagy DESC attól függ mi kell neked és megvan a limit is
    LIMIT 0 , 30  // a 30-at meg átírod annyira amennyire neked kell és kész
    Azért mert van benne egy WHERE. Vagyis így kéne kinézni:
    ORDER BY id ASC LIMIT 0, 30 WHERE Album_ID = 2 és így már sajnos nem működik



  5. #5
    Tag
    Csatlakozott
    10-09-06
    Hozzászólás
    53
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: MySQL rekord rendezés

    Idézet edem eredeti hozzászólása Hozzászólás megtekintése
    Én azt csinálnám a helyedben, hogy betennék egy timestamp mezőt. Nálam created_at és updated_at szokott lenni.

    Nálad ez most nem működik, de lehet "szimulálni" visszamenőleg. Én azt csinálnám, hogy írnék egy kis algoritmust, ami beállít az id alapján timestamp-okat a mezőidnek. Igaz, hogy nem akkor lett feltöltve, de utána tudsz ltérehozás dátuma alapján sorrendbe rendezni.

    Egy másik megoldás, hogy beteszel egy "position" mezőt, ami csak egy szám, ami alapján beállíthatod hogy hanyadik helyen legyen az adott rekordod.
    Ezt hogy kell pontosan csinálni? az adatbázist igazából még most tanulgatom.



  6. #6
    Music Addict speeedfire logója
    Csatlakozott
    10-05-19
    Hely
    Győr
    Hozzászólás
    446
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: MySQL rekord rendezés

    Idézet thelol eredeti hozzászólása Hozzászólás megtekintése
    Azért mert van benne egy WHERE. Vagyis így kéne kinézni:
    ORDER BY id ASC LIMIT 0, 30 WHERE Album_ID = 2 és így már sajnos nem működik
    A where nem változtat semmin sem...
    Akkor meg így és kész:
    Kód:
    SELECT * 
    FROM  `kepek` 
    WHERE Album_ID = 1
    ORDER BY id ASC 
    LIMIT 0 , 2
    Tökéletesen működik. 5.1.38 alatt tesztelve

    Szerk: Ha meg több táblából van a lekérdezés akkor egy left_join vagy having kell neki. Nem tudom hogy használod pontosan, mivel több infót nem írtál le.


    Utoljára módosítva: speeedfire által : 2011-03-12 14:46

  7. #7
    Tag
    Csatlakozott
    10-09-06
    Hozzászólás
    53
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: MySQL rekord rendezés

    Idézet speeedfire eredeti hozzászólása Hozzászólás megtekintése
    A where nem változtat semmin sem...
    Akkor meg így és kész:
    Kód:
    SELECT * 
    FROM  `kepek` 
    WHERE Album_ID = 1
    ORDER BY id ASC 
    LIMIT 0 , 2
    Tökéletesen működik. 5.1.38 alatt tesztelve

    Szerk: Ha meg több táblából van a lekérdezés akkor egy left_join vagy having kell neki. Nem tudom hogy használod pontosan, mivel több infót nem írtál le.
    Köszi! Tényleg működik.... lehet elírtam először valamit, mert mikor jelentkezett a hiba, akkor rögtön ezzel próbálkoztam.



  8. #8
    Music Addict speeedfire logója
    Csatlakozott
    10-05-19
    Hely
    Győr
    Hozzászólás
    446
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: MySQL rekord rendezés

    Nincs mit.

    Látom most ismerkedsz az sql-le, az sql 24 óra alatt elég jó könyv, meg sok php-s könyvben is vannak leírások róla. Na meg ott a w3school is. Az alapok elsajátítására az is nagyon jó oldal.



  9. #9
    problémageneráló ptrth logója
    Csatlakozott
    11-01-04
    Hely
    Diliház
    Hozzászólás
    209
    Begyűjtött 0 köszönetet
    0 hozzászólásával

    Alapbeállítás re: MySQL rekord rendezés

    Idézet thelol eredeti hozzászólása Hozzászólás megtekintése
    Azért mert van benne egy WHERE. Vagyis így kéne kinézni:
    ORDER BY id ASC LIMIT 0, 30 WHERE Album_ID = 2 és így már sajnos nem működik
    speeedfire megoldása természetesen helyes (szerintem még az ASC sem feltétlenül szükséges), Neked viszont tényleg nagyon kellenének az SQL alapok. Alapvető, hogy a WHERE előbb van mint az ORDER BY és a LIMIT.



  10. #10
    MinderBinder edem logója
    Csatlakozott
    09-09-02
    Hely
    Budapest
    Hozzászólás
    1.093
    Thanked 1 Time in 1 Post

    Alapbeállítás re: MySQL rekord rendezés

    Amúgy ezeket a "24 óra alatt" könyveket sokan szidják, de tény, hogy az alapokat érthetően megtudhatod belőle...viszont ha bele akarsz merülni, akkor több kell, mint egy könyv.



A téma címkéi:

Könyvjelzők

Hozzászólás szabályai

  • Új témákat nem hozhatsz létre
  • Válaszokat nem küldhetsz
  • Fájlokat nem csatolhatsz
  • A hozzászólásaidat nem módosíthatod
  •