Autor | Zpráva | ||
---|---|---|---|
maks Profil |
#1 · Zasláno: 12. 1. 2010, 15:18:20 · Upravil/a: maks
Ahoj,
konečně jsem došel do situace, kdy se mi hodí něco jiného než INSERT, SELECT a UPDATE, potřebuji vybírat z tabulky na základě shody s druhou. SELECT users.id, users.name, users.surname, users.phone users.rights, FROM users JOIN user_groups ON users.rights = user_groups.id ORDER BY users.rights ASC -- v DB mám uživatele s "rights" = 1 a zároveň mám skupinu s id=1, takže tento jeden záznam bych najít měl. EDIT: asi spíše napíšu slovně, vlastně ani nevím, jestli myšlenka toho, co jsem napsal do dotazu, je správná , takže: V tabulce users jsou různé informace o uživatelích, jednou z nich je rights - podle práv budu zobrazovat a skrývat obsah. V tabulce user_groups je id skupiny (které porovnávám s users.rights), jméno a další. A teď, co chci: Vybrat nějaké údaje z tabulky uživatelů (users) a podle toho, jaké mají číslo u rights vypsat název skupiny (tzn. kde se users.rights rovnají user_groups.id -> název skupiny) Tabulky můžou vypadat třeba takto: USERS: id .... rights (další sloupce jako jméno, příjmení, kontakty...) 1 .... 2 2 .... 1 4 .... 5 USER_GROUPS id .... name 1 .... skupina 1 2 .... skupina 2 5 .... skupina 5 A já potřebuji získat: vše z první tabulky + číslo u rights nahradit slovně (podle shody rights a id). Tak :-) Děkuji, Maks |
||
Kajman_ Profil * |
#2 · Zasláno: 12. 1. 2010, 15:37:06
Tipnul bych, že dotaz vrátí chybu, protože před from je navíc čárka.
|
||
maks Profil |
#3 · Zasláno: 12. 1. 2010, 15:43:16 · Upravil/a: maks
Kajman:
ano, řádek jsem tady umazal (bez čárky), proto je tam navíc. Zapomněl jsem vybrat ten sloupec, přesto se zeptám, je toto dobře? Nešlo by to napsat lépe? SELECT users.id, users.name, users.surname, users.phone, users.rihgts, user_groups.group_name FROM users JOIN user_groups ON users.rights = user_groups.group_id ORDER BY users.rights ASC |
||
Kajman_ Profil * |
#4 · Zasláno: 12. 1. 2010, 15:49:30
Syntaxi joinu jste napsal dobře. Pokud to vrací data, co chcete, tak je to dobře :-)
|
||
maks Profil |
#5 · Zasláno: 12. 1. 2010, 15:51:26
Kajman:
„Pokud to vrací data, co chcete, tak je to dobře :-)“ ok :-) Netušil jsem, že odpověď bude tak snadno předvídatelná. Přesto moc děkuji. |
||
Časová prodleva: 22 dní
|
|||
maks Profil |
#6 · Zasláno: 3. 2. 2010, 10:53:20
Abych nezakládal nové vlákno, zkusím pokračovat v tomto svém. Join by to asi taky mohl být, i když nevím..
Mám v tabulku (ID, JMENO, ..., PARENT_ID, ...), tedy hodnoty mohou vypadat takto: ID | JMENO | PARENT 1 xy 0 2 aaa 0 3 ab 1 4 xy 3 5 xy 0 6 xy 10 7 xy 1 ... Zkrátka, ukládám ID nadřezené položky, ale potřebuji vypisovat její název namísto ID. Přišlo mi logické ukládat neměnné ID, než název, který se může měnit. Při každé změně bych jej musel měnit ve všech položkách, kde je obsažen, ne jen na jednom řádku. Zkoušel jsem dotaz: $query = "SELECT $pages.id, $pages.name, ... $pages.parent_id, ... FROM $pages JOIN $dalsi_tabulka ON $pages.type = $dalsi_tabulka.id -- nepodstatné, jen nějaký join JOIN $pages ON $pages.parent_id = $pages.name -- JOIN pages s pages asi nejde, ale nevím, jak přiřadit číslo ze sloupce parent_id k názvu, kde se id rovná. Místo čísel (0, 0, 1, 3, 0, 10, 1) z příkladu dat výše bych potřeboval vypsat (--, --, xy, ab, --, str10, xy) ORDER BY ..."; Děkuji. |
||
Kajman_ Profil * |
#7 · Zasláno: 3. 2. 2010, 11:09:51
Možná jen neznáte aliasy, které jsou potřeba při spojování tabulky se samo sebou.
select p.*, parent.name as parent_name from pages as p left join pages as parent on p.parent_id = parent.id |
||
maks Profil |
#8 · Zasláno: 3. 2. 2010, 11:19:11
Kajman:
„Možná jen neznáte aliasy, které jsou potřeba při spojování tabulky se samo sebou.“ o aliasech jsem zatím neslyšel, válčím coby samouk :-) Může se zeptat, co znamenají ty jednotlivé části? p.*, parent.name (tabulka parent není, alespoň tak bych to ze zápisu pochopil) - nebo "tabulka" parent je tatáž jako na 3. řádku ten alias? Případně, jestli bych vás mohl poprosit o začlenění do toho mého dotazu výše - horko těžko jsem jej dal dohromady a tohle potřebuji nejprve vidět pohromadě a pak to pomalu začít vštřebávat. Děkuji. |
||
123456789 Profil * |
#9 · Zasláno: 3. 2. 2010, 11:55:31
Posledni uvedeny dotaz jednoduse vybere vsechny atributy z tabulky pages + prida atribut s nazvem nadrazeneho zaznamu v teze tabulce. Co je pro dany zaznam nadrazeny zaznam se urcuje dle atributu parent_id, ktery tedy odkazuje na id nadrazeneho zaznamu.
|
||
Časová prodleva: 14 let
|
0