Autor | Zpráva | ||
---|---|---|---|
Martin Profil |
#1 · Zasláno: 4. 12. 2004, 20:06:23
Ahoj,
chtěl jsem se jen zeptat jak se dá z databáze vypsat jen posledních pět záznamů, který maj nejvyšší id co nejjednodušeji...Díky |
||
Michalek Profil |
#2 · Zasláno: 4. 12. 2004, 20:15:53
mysql_query ("select from tabulka bunka order by id desc limit 0,5")
to ti vybere pet poslednich, myslim, priblizne by to tak melo byt |
||
thingwath Profil * |
#3 · Zasláno: 4. 12. 2004, 20:20:20
SELECT * FROM tabulka ORDER BY id DESC LIMIT 5;
Místo * pochopitelně případně žádané sloupce. |
||
Martin Profil |
#4 · Zasláno: 4. 12. 2004, 20:20:40 · Upravil/a: Martin
JO díky. to fachá dobře..........ale co mám udělat aby se mi vybraný záznami vypsali pospátku?
|
||
thingwath Profil * |
#5 · Zasláno: 4. 12. 2004, 20:40:48
Od toho je tam to DESC, obrácené řazení.
|
||
Martin Profil |
#6 · Zasláno: 4. 12. 2004, 20:57:38
Asi sem se špatně vyjádřil.....tohle mi SELECT * FROM tabulka ORDER BY id DESC LIMIT 5; vybere posledních pět záznamů...a když těch posledních pět záznamů budu chtít vypsat pozpátku...udělám co? Díky
|
||
mipo Profil |
#7 · Zasláno: 4. 12. 2004, 21:33:29
Ak som ťa správne pochpil, tak stačí, aby si namiesto DESC napísal ASC. Jestli se nejmejlím:-)
|
||
Michalek Profil |
#8 · Zasláno: 4. 12. 2004, 22:06:03
2 mipo, ale to ti vybere obrazky s nejmensim id, on potrebuje vybrat pet poslednich obrazku a vypsat je obracene
priklad: potrebuje vybrat z 1 2 3 4 5 6 7 8 9 10 pouze 6 7 8 9 10 a vypsat je jako 10 9 8 7 6 :-) |
||
llook Profil |
#9 · Zasláno: 5. 12. 2004, 07:58:28
Jedna možnost je načíst si do pole všechny ty záznamy a pak to převrátit (array_reverse).
Problém by ale nastal, kdyby to pole mělo víc než je memory_limit, tedy obvykle 8MB. Pak by se asi musel pro každý řádek dělat zvlášť dotaz, nebo použít jiný DBMS. |
||
thingwath Profil * |
#10 · Zasláno: 5. 12. 2004, 10:13:29
Šlo by to udělat velmi snadno jedním vnořeným selectem, ale to máme v MySQL verze 4.0 a nižší smůlu ... MySQL 4.1+ a každá jiná rozumná databáze to umí.
|
||
Martin Profil |
#11 · Zasláno: 5. 12. 2004, 15:40:58 · Upravil/a: Martin
Na serveru je verze 4.0.22 to neni 4.0 a nižší ale zase to neni 4.1 :-) jak by prosim tě zněl ten vloženej select? Díky
|
||
thingwath Profil * |
#12 · Zasláno: 5. 12. 2004, 16:28:18
No, vypadlo by to asi jako SELECT id FROM (SELECT id FROM tabulka ORDER BY id DESC LIMIT 5) AS dotaz ORDER BY id ASC;
Nebo možná trochu jinak (nejsem si jist tím řazením). 4.0.22 chápu jako 4.0 a nižší (4.0 a nižší je u mě všechno co začíná na 4.0, takže i 4.0.22). |
||
Honza Hučín Profil |
#13 · Zasláno: 5. 12. 2004, 18:34:45
Dá se to udělat jediným dotazem fungujícím i v nižších verzích MySQL. Takové věci se dělají propojením tabulky se sebou samotnou pomocí podmínky s nerovností:
select a.*, count(b.id) as poradi from tabulka as a join tabulka as b on a.id<=b.id group by a.id having poradi<=5 order by poradi desc; Netestoval jsem to, ale mělo by to fungovat. Podstata je v tom, že ke každému záznamu z tabulky se spojí všechny záznamy z téže tabulky, které mají stejnou nebo větší hodnotu id. Když se to pak seskupí, spočítá se, kolik ostatních záznamů v tabulce má stejné nebo větší id. Klauzule HAVING po seskupení omezí záznamy jen na ty, které mají nejvýše jiných se stejným nebo vyšším id - tedy na 5 záznamů s nejvyšším id. No a ORDER BY to seřadí. Podobná finta se používá u obecného výpočtu pořadí, viz http://suplik.petnik.cz/index.php?cl=223 |
||
Tomas Profil * |
#14 · Zasláno: 6. 12. 2004, 07:56:56
No a když chci potom výsledek spojit ještě s jednou tabulkou? Dík
|
||
Honza Hučín Profil |
#15 · Zasláno: 6. 12. 2004, 09:30:42
A nemůžeš to spojit už v tomhle selectu? Třeba takhle:
select a.*, count(b.id) as poradi, c.* from (tabulka as a join tabulka as b on a.id<=b.id) join jinatabulka as c on a.propojovacipole=c.propojovacipole group by a.id having poradi<=5 order by poradi desc; Tou závorkou za from si nejsem z hlavy úplně jistý, ale pokud by to nefungovalo přes join, dají se tabulky propojit i v klauzuli WHERE. Samozřejmě se musí ohlídat seskupování pomocí GROUP BY, ale to už záleží na konkrétním případu. |
||
Časová prodleva: 19 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0