Autor | Zpráva | ||
---|---|---|---|
mark92 Profil |
#1 · Zasláno: 12. 11. 2010, 20:50:35
zdravím, neviete, prečo mi nefunguje tento kód?
$dat = mysql_query("SELECT TOP 1 * from uzivatelia"); $riadok = Mysql_Fetch_Array($dat); echo $riadok["id"]; snažím sa vybrať posledný riadok v tabuľke, no vypisuje mi, že $dat je boolean - false... |
||
Anonym Profil * |
#2 · Zasláno: 12. 11. 2010, 20:58:23
Myslím si že to mysql nezná
poslední záznam bych tipl na SELECT * FROM uzivatelia ORDER BY id DESC LIMIT 1 a první na SELECT * FROM uzivatelia ORDER BY id ASC LIMIT 1 předpokládám, že existuje sloupec id jako primary autoincrement |
||
mark92 Profil |
#3 · Zasláno: 12. 11. 2010, 21:10:54
toto riešenie ma napadlo ako prvé, no prišlo mi to ako veľmi neekonomické... mám totiž tabuľku s užívateľmi, každý má svoje id a tie sú radené v databáze od najmenšieho po najväčšie, čiže pri vkladaní nového užívateľa do databázy som nemal chuť vyhľadávať maximálnu hodnotu id, keď viem, že je v poslednom riadku... takže musím to riešiť cez
SELECT max(id) AS id FROM uzivatelia to bude asi rýchlejšie ako SELECT * FROM uzivatelia ORDER BY id DESC LIMIT 1 alebo sa mýlim? |
||
Anonym Profil * |
#4 · Zasláno: 12. 11. 2010, 21:21:52
nevím - nevidím do toho, ale selský rozum mi říká, že
SELECT * FROM uzivatelia ORDER BY id DESC LIMIT 1 prostě vezme poslední řádek z tabulky kdežto SELECT max(id) AS id FROM uzivatelia provede jakoby výpočet navíc - nejdřív vypočítá max a potom hledá řádek ale říkám, že to nevím jistě |
||
Alphard Profil |
#5 · Zasláno: 12. 11. 2010, 21:35:40
O jak velkých tabulkách se bavíme?
Obecně, pokud je na sloupci id index (což předpokládám, že je to primary key), neměl by to být problém. Váš zápis s max není ekvivalentní, vybírá jen sloupec id, musel byste ho sestavit jako select * from tabulka where id = (select max(id) from tabulka) |
||
mark92 Profil |
#6 · Zasláno: 12. 11. 2010, 21:56:07
vďaka, čo sa týka veľkosti tabuľky, ak mám hovoriť v optimistických číslach, tak cez 10 000 riadkov a na id je primary key... ešte som sa chcel spýtať, dajú sa kombinovať príkazy update a select typu: výber updatovaného riadku s podmienkou, že id je maximálne id v tabuľke? alebo na to treba 2 samostatné SQL príkazy? teda niečo v zmysle:
SELECT * FROM (UPDATE uzivatelia SET online=1 WHERE id=(select max(id) from tabulka)); alebo inými slovami, možu byť ako poddotazy iné príkazy, ako SELECT? vďaka |
||
LosFilipos Profil |
#7 · Zasláno: 12. 11. 2010, 22:12:48 · Upravil/a: LosFilipos
mark92:
Zkoušel jsi někdy last_insert_id? SELECT LAST_INSERT_ID() FROM uzivatele |
||
Nox Profil |
#8 · Zasláno: 12. 11. 2010, 22:19:20
LosFilipos:
Zkoušel jsi někdy last_insert_id? Nejspíš to funguje jen když byl předtím insert. Když jsem to teď zkusil na tabulku, která má 1 PK auto_inc ale dlouho se na ni nešahalo, tak to vrací akorát kvanta nul |
||
Alphard Profil |
#9 · Zasláno: 12. 11. 2010, 23:09:10
[#6] mark92
Pokud vím, tak ne. Proč nepoužijete dva dotazy? V závislosti na konkrétní situaci možná 3 s tím, že 1. select by vybral patřičná id, aby se zamezilo možným problémům s paralelním přístupem. |
||
mark92 Profil |
#10 · Zasláno: 12. 11. 2010, 23:56:59
Nieje to tak, že zloženie viacerých SQL príkazov do jedého znamená urýchlenie chodu programu? ak som manuály dobre čítal, tak algoritmy je pokial možno dobré nechávať na databázy, lebo bežia rýchlejšie, ako PHP a prešli silnými optimalizáciami počas doby ich vývoja. Preto mi pripadal dátový proces typu PHP->MYSQL->PHP->MYSQL atď. viacerými SQL príkazmi ako plytvanie rýchlosti servera, no teraz neviem... inak aké problémy môžu nastať paralelným prístupom?
|
||
Alphard Profil |
#11 · Zasláno: 13. 11. 2010, 00:26:11
mark92:
Optimalizaci nelze popsat obecně do jednoho příspěvku. Je nutná znalost obecných věcí, dané databáze a samozřejmě záleží na konkrétním problému. „Nieje to tak, že zloženie viacerých SQL príkazov do jedého znamená urýchlenie chodu programu?“ Ne vždy. Složitý dotaz může být pomalejší než více jednoduchých. Dotazy se různě cachují apod. podívejte se na explain. „PHP->MYSQL->PHP->MYSQL“ Tohle je skutečně lepší přepsat do MySQL, lze-li to nějak rozumně. „nak aké problémy môžu nastať paralelným prístupom?“ Čtěte, nikomu se nebude chtít odpovídat na obecné dotazy, když je všude hromada článků :-) |
||
mark92 Profil |
#12 · Zasláno: 13. 11. 2010, 22:37:43
vďaka moc krát za informácie :-)
|
||
Časová prodleva: 13 let
|
0