Autor Zpráva
maks
Profil
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. Podle http://www.linuxsoft.cz/article.php?id_article=837 jsem si napsal dotaz, ten však nic nenajde. Moje otázka zní, proč tomu tak je? Špatně by snad být neměl (ale asi bude) :-)
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 *
Tipnul bych, že dotaz vrátí chybu, protože před from je navíc čárka.
maks
Profil
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 *
Syntaxi joinu jste napsal dobře. Pokud to vrací data, co chcete, tak je to dobře :-)
maks
Profil
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.
maks
Profil
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 *
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
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 *
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0