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
(select * from t order by id desc limit 5)
union
(select * from t where id=100)
Hromotluck
Profil *
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
Pokud to nefunguje, vypište si chybu. Možná to bude neupraveným názvem tabulky z příkladu.
Hromotluck
Profil *
Tak se omlouvám chyba byla tentokrát mezi klávesnici a židlí :-)))), funguje to ! Díky
Hromotluck
Profil *
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
(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
...
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)  

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: