Autor | Zpráva | ||
---|---|---|---|
Hromotluck Profil * |
Začínám s MYSQL a nevím jak se nejefektivněji v jednom SELECTu dělá poměrně triviální věc:
Chci vybrat pět naposledy vložených příspěvků (řádků) podle ID a zároveň i jeden podle libovolně zvoleného ID. Třeba ID ='100' V tabulce budu mám nyní záznamů 200 (řádků) a očekáváný výběr bude obsahovat tato ID: 200, 199, 198, 197, 196 a 100 Jak se to má pomocí jednoho SELECTU dělat, aby to bylo co nejefektivnější a nejrychlejší, nebo to musí být bezpodmínečně zapsáno dvěma SELECTy? doplnění, takto vybírám posledních pět příspěvků: $vyber = mysqli_query($db->dbi,"SELECT * FROM moje_tabulka ORDER BY id DESC LIMIT 0,5"); ... |
||
Kajman Profil |
#2 · Zasláno: 3. 2. 2016, 12:55:12
(select * from t order by id desc limit 5) union (select * from t where id=100) |
||
Hromotluck Profil * |
#3 · Zasláno: 3. 2. 2016, 13:22:52
Kajman:
Děkuji to funguje, paráda. Ještě bych u této tabulky potřeboval rozchodit variantu, že vyberu posledních 5 podle ID + jeden podle názvu příspěvku (VARCHAR, nazev) Zkusil jsem to obdobně a to nefunguje :( : $vyber = mysqli_query( $db->dbi,("(SELECT * FROM t ORDER BY id DESC LIMIT 5) UNION (SELECT * FROM t WHERE nazev='".mysqli_real_escape_string($db->dbi, $query)."') ") ); while ($radek = mysqli_fetch_assoc($vyber)){ ... atd. .... |
||
Kajman Profil |
#4 · Zasláno: 3. 2. 2016, 13:29:27
Pokud to nefunguje, vypište si chybu. Možná to bude neupraveným názvem tabulky z příkladu.
|
||
Hromotluck Profil * |
#5 · Zasláno: 3. 2. 2016, 13:32:17
Tak se omlouvám chyba byla tentokrát mezi klávesnici a židlí :-)))), funguje to ! Díky
|
||
Hromotluck Profil * |
#6 · Zasláno: 3. 2. 2016, 20:23:11
Ještě bych poprosil o navazující věc. S dalšími tabulkami řeším obdobnou věc jako předtím.
Zjednodušená struktura mých tabulek: remeslnici: ID | jmeno (VARCHAR) ---------------------------------------------------- remesla: ID_R | remeslo (VARCHAR) ---------------------------------------------------- ID = ID_R (primary key) ---------------------------------------------------- *v tabulce "remeslo" má každý řemeslník jen jedno přidělené řemeslo! Co potřebuji? Vybrat pět naposledy vložených jmen řemeslníků z tabulky "remeslnici" , zároveň vybrat údaje o řemeslníkovi s ID=100 To jsem úspěšně aplikoval podle tipu Kajmana ;-) (select * from remeslnici order by id desc limit 5) union (select * from remeslnici where id=100) ale teď bych ideálně stále v jednom "SELECTU" potřeboval zároveň vybrat pět zcela náhodných řemeslníků mající stejné řemeslo jako má ten s ID=100. S tím si moje "zelená" hlava zatím nedokáže poradit, uvažoval jsem o zrušení tabulky "remeslo" a vše mít pouze v jedné, ale to se většinou nedporučuje a přijde mi logické to mít odděleně..... děkuji pěkně předem za tipy.... |
||
lionel messi Profil |
#7 · Zasláno: 3. 2. 2016, 20:43:21
(select * from remeslnici order by id desc limit 5) union (select r.*, rm.* from remeslnici r join remesla rm on r.ID = rm.ID_R where id=100) t union (select select r.*, rm.* from remeslnici r inner join remesla rm on r.ID = rm.ID_R where rm.remeslo = t.remeslo) Netestované. |
||
Kajman Profil |
#8 · Zasláno: 4. 2. 2016, 09:50:19
... UNION (SELECT * FROM remeslnici WHERE id IN (SELECT id FROM remeslo WHERE id_r IN (SELECT id_r FROM remoslo WHERE id = 100)) ORDER BY Rand() LIMIT 5) |
||
Časová prodleva: 9 let
|
0