Autor | Zpráva | ||
---|---|---|---|
souki Profil |
#1 · Zasláno: 6. 7. 2008, 11:35:55
Mám dejme tomu zboží v kategorii, řazené podle názvu a ceny. Když jsem v detailu toho zboží (stále vím, kategorii a v jakých prioritách se řadí), tak bych potřeboval odkázat na další a předcházející položku.
Kdyby to bylo jen podle ceny, tak je to jasné. Ale to řazení může být podle více sloupců (v různých tabulkách) a navíc jejich pořadí (+výběr) ovlivňuje uživatel. Nenapadá vás, jak získat třeba ID následujicího a předcházejícího produktu? Dík |
||
Alphard Profil |
#2 · Zasláno: 6. 7. 2008, 12:01:52
nechat data seřadit podle požadavků a vytáhnout předchozí záznam s order by xxx desc limit 1 a následující s order by xxx limit 1, do 1 dotazu lze spojit pomocí union
jestli si vzpomínám, je o tom něco i ve FAQ |
||
souki Profil |
#3 · Zasláno: 6. 7. 2008, 12:17:14
Alphard
Jenže jak vytáhnu předchozí záznam? :) Když vezmu data seřazená podle požadavků, tak ten můj produkt bude třeba 30. z 50ti a já potřebuju č.29 a 31. Jenže nevím, že ten můj produkt je 30. |
||
souki Profil |
#4 · Zasláno: 6. 7. 2008, 12:19:03 · Upravil/a: souki
Sakriš ono to je vážně ve FAQ. Už jsem tam dlouho nebyl... Pardon.
Takže si to jen upravím na o něco komplikovnější případ EDIT: Jenže ve FAQ se to řeší pro řazení podle jednoho sloupce a jen v jedné tabulce. Já mám spojení několika tabulek a řazení podle několika sloupců - jak tam vyřeším tu prioritu? |
||
Alphard Profil |
#5 · Zasláno: 6. 7. 2008, 12:37:55
buď nějak poskládat podmínku where, ale nevím, jestli je to možné
také by se mohly data vytáhnout setříděná a očíslovaná, najít v nich současné id a podle pořadí vzít větší a menší, viz http://www.linuxsoft.cz/article.php?id_article=886 ale až uvidíte ten dotaz pro jedinou tabulku, budete mít určitě chuť vraždit a třetí možnost, počkat, co vymyslí Kajman_ :-) |
||
Kcko Profil |
#6 · Zasláno: 6. 7. 2008, 14:50:26
souki mozna ti pomuze toto ...
http://www.webfaq.cz/clanek/Mysql-poradi-radku-v-dotazu |
||
Kajman_ Profil * |
souki
Stačí ve where přidat cenu mezi nazev a id, kdy to bude stále před nebo za záznamem o(nazev=nazev and cena<cena) a také dáte cenu do řazení. Prostě vyberete, co je před záznamem a seřadíte to obráceně, vezmete první a máte předchozí. Následující je zase první z těch, co jsou za aktuálním záznamem. Může to být těžší přepsat to order by do těch podmínek, ale jde to ;-) Nebo alespoň spočítat kolik záznamů při tom řazení je nad aktuálním a pak použít klasický order a dát tam limit, aby to vzalo jeden před až jeden po. |
||
Časová prodleva: 16 let
|
0