Autor | Zpráva | ||
---|---|---|---|
charlie22 Profil * |
#1 · Zasláno: 30. 1. 2009, 20:15:26
Zdravím, trapim se tady s dotazem do databaze. Kicem je identifikator uzivatele. Ten ma v databazi X zaznamu. Potrebuji vybrat jen 3 zaznamy a to od kazdeho uizvatele. Pouziti limit mi samozrejme vybere jen 2 zaznamy, ale jen pro jednoho uzivatele, pokud mam setrideno podle uzivatelu. Ma nekdo poneti, jak by to melo vypadat?
DATA: USER1, 8 USER1, 5 USER1, 2 USER1, 1 USER1, NULL USER2, 5 USER2, 2 USER2, 1 USER2, 0 VYSLEDEK: USER1, 5 USER1, 2 USER2, 5 USER2, 2 V nejlepsím pripade bych jeste do sloupce 3 potreboval sumu tech 2 polozek..Diky za tipy predem. |
||
charlie22 Profil * |
#2 · Zasláno: 30. 1. 2009, 20:17:05
samozrejme vysledek ma byt takovyhle:
USER1, 8 USER1, 5 USER2, 5 USER2, 2 |
||
Kajman_ Profil * |
#3 · Zasláno: 30. 1. 2009, 20:26:19
Co třeba ořezat výsledek z group_concat? Ale to by bylo jen jeden řádek pro každého uživatele.
Na další možnost se zkuste inspirovat zde http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=28&topic=79886#2 Jen to nebude fungovat správně, pokud ta kombinace dvou sloupečků není primární klíč (což asi není, když tam máte null hodnoty). |
||
charlie22 Profil * |
#4 · Zasláno: 30. 1. 2009, 20:41:02
no uz jsem denska asi pretazenej..
|
||
charlie22 Profil * |
#5 · Zasláno: 31. 1. 2009, 21:35:37
tak zatím se mi to přímou cestou nepodařilo vyřešit a mám pocit, že MySQL je na tohle krátky. Vypadá to tak, že to musím celý nacucnout do nejakýho pole v PHP a pak zapsat nejakou TEMP tabulku jen se X záznamy od každýho unkátního usera. Nebo se pletu?
|
||
Kajman_ Profil * |
#6 · Zasláno: 31. 1. 2009, 22:56:31
A tohle dnešní vlákno také k inspiraci nepomůže?
http://diskuse.jakpsatweb.cz/index.php?action=vthread&forum=28&topic=89193#4 |
||
charlie22 Profil * |
#7 · Zasláno: 1. 2. 2009, 12:09:39
...nic, nechytam se, ale zjednodussim zadani, protoze ani tohle nejsem schopen:
Tabulka: User: Pavel Pavel Pavel Pavel Petr Petr Petr Dan select by mel vybrat maximalne kazde jmeno 2x. Vysledek: User: Pavel Pavel Petr Petr Dan |
||
Kajman_ Profil * |
Ale to jste právě udělal těžší. U těch odkazovaných řešení je nutné, aby tam bylo možné jednoznačné seřazení pro určení těch dvou záznamů. Dokud tam nebudete mít primární klíč, tak to řešení na úrovní sql mít nemusí.
K té první struktuře je nutné dát spíše další sloupeček, který jednoznačně určí, který záznam se bude brát, když budou třeba tři hodnoty u jednoho uživatele stejné. Když Vám nestačí obecné rady a ukázkové příklady, tak alespoň napište opravdovou strukturu tabulky, co má primární klíč. Ale vlastně bez toho klíče je ještě v mysql jeden způsob. Dá se využít uživatelské proměnné. To by možná bylo z těch různých řešení možná nejméně náročné na db stroj. |
||
charlie22 Profil * |
#9 · Zasláno: 1. 2. 2009, 14:48:25
se omlouvam, samozrejme jsem zapmnel uvest ze Prim key by byl autoincrement pro kazdy radek.
|
||
Kajman_ Profil * |
#10 · Zasláno: 1. 2. 2009, 15:12:46
Takže ukázka další varianty s uživatelskými proměnnými...
select k.*, @n:=@n*(@last_user=`user`)+1 n, @last_user:=`user` u from `tabulka` k, (select @n:=0, @last_user:='') t having n <=2 order by `user`, `body` desc Pokud tam budou vadit ty dva pomocné sloupce navíc, tak si to zanořte a vypište to bez nich. |
||
charlie22 Profil * |
#11 · Zasláno: 1. 2. 2009, 16:34:37
..pekny, ale na moje znalosti bych potreboval jeste mensi osvetu co je co, protoze pouziti uzivatelske promenne vidim poprve.
nejsou mi jasne hodnoty k,u,t, pokud n chapu jako definovane, ale jiste to nevim. no mozna bych to potreboval prelozit do srozumitelne reci, co ten dotaz vykoná. Diky za trpelivost se mnou. |
||
Kajman_ Profil * |
#12 · Zasláno: 1. 2. 2009, 18:29:52
pouziti uzivatelske promenne vidim poprve
http://dev.mysql.com/doc/refman/5.0/en/user-variables.html nejsou mi jasne hodnoty k,u,t k je alias tabulky tabulka t je povinný alias pomocné tabulky vzniklé poddotazem a slouží pouze k inizializaci uživatelských proměnných u je alias pomocného sloupečku, který je jen pro zapamatování posledního uživatele pokud n chapu jako definovane, ale jiste to nevim n je alias sloupečku, který určuje pořadí daného záznamu v rámci jednotlivých uživatelů Tenhle sloupeček je ten, co to dokáže vybrat ty dva první záznamy. Přičítá po řádcích jedničky, ale když se uživatel změnil, tak začne odznovu. |
||
charlie22 Profil * |
#13 · Zasláno: 2. 2. 2009, 00:26:31
pane, diky, vas dotaz funguje, jak jsem chtel a rovnou jsem se pustil do studia uzivatelskych promennych..diky mnohokrat za rady.
|
||
Časová prodleva: 15 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0