Autor | Zpráva | ||
---|---|---|---|
RiZe Profil |
#1 · Zasláno: 13. 4. 2007, 12:28:29
Babrám se s SQL dotazem na spojování tabulek. Mám několik tabulek, tabulku uživatelů (cth_users), session relací (cth_sessions) a další nepodstatné pro můj problém. Tabulky mají následující strukturu:
Ukládám si do cache souboru souboru všechny uživatele a k tomu připojuji dodatečná data. Zde potřebuji připojit k uživateli ještě hodnotu sloupce session_last_visit a to do sloupce user_action, který je v tabulce cth_sessions. Potřebuji ho připojit podle uživatelova ID. Složil jsem dotaz, který ale nefunguje. Dotaz je ořezán od nepotřebných dat, stejně jako tabulky (je jich více). Prosím poraďte, díky
|
||
tiso Profil |
#2 · Zasláno: 13. 4. 2007, 13:53:51
V tom dotaze čo si tu dal nemáš dobre definovanie aliasov (u, s) a nemáš dokončenú podmienku pre WHERE, si si istý že to v pôvodnom dotaze máš správne?
|
||
RiZe Profil |
#3 · Zasláno: 13. 4. 2007, 14:47:21
Podmínka je stejná i původním dotazu a správností dotazu si nejsem jistý, jinak bych sem nepsal :)
|
||
MzM Profil |
#4 · Zasláno: 13. 4. 2007, 15:43:32
co jsi myslel tím "Dotaz je ořezán od nepotřebných dat, ..."
Moc dotazu nerozumím, chceš jenom lidi, co mají nějaká data v tabulce cth_sessions? |
||
RiZe Profil |
#5 · Zasláno: 13. 4. 2007, 16:01:55
Myslel jsem tím, že připojované tabulky, které s problémem nemají nic společného jsem z dotazu odstranil. Ano, potřebuju lidi z tabulky cth_users a ke každému uživateli připojit sloupec session_last_visit z tabulky cth_sessions podle ID uživatele, které je v každé tabulce.
|
||
tiso Profil |
#6 · Zasláno: 13. 4. 2007, 16:04:07
RiZe
1. FROM ".CTH_USERS." AS u LEFT JOIN ".CTH_SESSIONS." AS s 2. čo podľa Teba znamená WHERE s.session_userid ? Čo to má robiť? |
||
RiZe Profil |
#7 · Zasláno: 13. 4. 2007, 16:10:32
Zkoušel jsem, testoval, takže je to s jistotou blbě. Chtělo by to složit ten dotaz znovu. Co se týče aliasu, uviděl jsem tenhle systém u phpBB a funguje, mrknu schválně do manuálu.
|
||
Kajman_ Profil * |
#8 · Zasláno: 13. 4. 2007, 20:45:21
Složil jsem dotaz, který ale nefunguje
Nefunguje nějak konrétně? Mysql hlásí chybu? A není to user_id tak velké, že se nevejde korektně do session_userid? |
||
RiZe Profil |
#9 · Zasláno: 13. 4. 2007, 20:56:50 · Upravil/a: RiZe
Nehlásí žádnou chybu, ale prvního uživatele to vybralo 2x (asi kvůli více řádkům v cth_sessions).
Není velké |
||
Kajman_ Profil * |
#10 · Zasláno: 13. 4. 2007, 21:00:02
Tak si dejte
select distinct ... Asi ten uživatel přišel přes dva prohlížeče nebo tak něco. |
||
RiZe Profil |
#11 · Zasláno: 13. 4. 2007, 23:01:08
Takže takhle, potřebuji vybrat všechna uživatelská data z tabulky cth_users a jeden sloupec z cth_sessions. Řádky user_id a session_userid uchovávají oba hodnotu uživatelova ID. Potřebuji tedy vybrat vše z cth_users plus session_last_visit a to podle těch dvou sloupců se stejnout hodnotou.
|
||
Kajman_ Profil * |
#12 · Zasláno: 14. 4. 2007, 00:16:21
SELECT u.*, max(s.session_last_visit) AS user_action FROM `cth_users` u, `cth_sessions` s
WHERE u.user_id = s.session_userid group by u.user_id ORDER BY u.user_id |
||
RiZe Profil |
#13 · Zasláno: 14. 4. 2007, 00:30:10 · Upravil/a: RiZe
Vyzkouším, díky moc.
EDIT: vyšel jsem z mého řešení s tvými prvnky (některými) a kompletní dotaz je níže, včetně těch "přebytečných" dat. Všechny uživatele to začalo vybírat až po odstranění podmínky where user_id = session_userid. Teď už to běhá jak má ;-)
|
||
Časová prodleva: 17 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0