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.
re: MySQL rekord rendezés
Idézet:
thelol eredeti hozzászólása
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? :confused1:
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
re: MySQL rekord rendezés
Idézet:
speeedfire eredeti hozzászólása
Már miért ne lehetne a limit mellett egy desc vagy asc? :confused1:
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
re: MySQL rekord rendezés
Idézet:
edem eredeti hozzászólása
É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. :)
re: MySQL rekord rendezés
Idézet:
thelol eredeti hozzászólása
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. :)
re: MySQL rekord rendezés
Idézet:
speeedfire eredeti hozzászólása
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. :)
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.
re: MySQL rekord rendezés
Idézet:
thelol eredeti hozzászólása
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.
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.