ďťż
 
[MySQL] Wybieranie produktów należących do gałęzi drzewa grup ďťż
 
[MySQL] Wybieranie produktów należących do gałęzi drzewa grup
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

[MySQL] Wybieranie produktów należących do gałęzi drzewa grup



Michał - 28-03-2006 00:02
[MySQL] Wybieranie produktów należących do gałęzi drzewa grup
  Witam

Mam grupy produktów; w takiej, które są w drzewie:

- Samochody
--Osobowe
---BMW
---Mercedes
--Ciężarowe
---Iveco
---Scania
- Przyczepy
--Z jedną osią
--Z dwiema osiami

Grupy te mam zapisane w tabeli:

id | id_glowy | nazwa

najwyższe grupy ("Samochody" i "Przyczepy") ma id_glowy równe 0.

Potem w tabeli produktów przykładowy wpis ma:

id | grupa | nazwa

czyli np.

4 | 3 | '500 SEC'

3 to ID Mercedesa

Jak zapytać bazę o wszystkie produkty będące samochodami ciężarowymi.

Próbowałem podzapytaniem:

SELECT * FROM produkty WHERE grupa = (SELECT id FROM grupy WHERE id_glowy =
4)

Ale baza zwraca mi błąd że podzapytanie zwraca więcej niż jeden wiersz... co
robić?

Pozdrawiam





Slawomir Cichy - 28-03-2006 00:02

  Michał wrote:
> Witam
>

.....

> Jak zapytać bazę o wszystkie produkty będące samochodami ciężarowymi.
>
> Próbowałem podzapytaniem:
>
> SELECT * FROM produkty WHERE grupa = (SELECT id FROM grupy WHERE id_glowy =
> 4)
>
> Ale baza zwraca mi błąd że podzapytanie zwraca więcej niż jeden wiersz... co
> robić?
>
>
> Pozdrawiam
>
>
>

SELECT * FROM produkty WHERE grupa in (SELECT id FROM grupy WHERE
id_glowy = 4)

pozdrawiam
Slawas




Michał - 28-03-2006 00:02

  >
> SELECT * FROM produkty WHERE grupa in (SELECT id FROM grupy WHERE id_glowy
> = 4)
>

Wielkie dzięki! O to mi chodziło... a czy dałoby się to zrobić tak żeby
działało dla dowolnej ilości poziomów w głąb? Czyli żeby się zapętliło? Czy
to nie możliwe w MySQL?

Pozdrawiam




keczerad - 28-03-2006 00:02

  Michał napisał(a):
>>SELECT * FROM produkty WHERE grupa in (SELECT id FROM grupy WHERE id_glowy
>>= 4)
>>
>
>
> Wielkie dzięki! O to mi chodziło... a czy dałoby się to zrobić tak żeby
> działało dla dowolnej ilości poziomów w głąb? Czyli żeby się zapętliło? Czy
> to nie możliwe w MySQL?

hmm, no chyba mozna by jakos rekurencje w funkcji zrobic na kursorze,
ale to w mysql 5

--

keczerad

http://www.e-mo.com.pl
sklep w (X)HTML





Michał - 28-03-2006 00:02

  >
> hmm, no chyba mozna by jakos rekurencje w funkcji zrobic na kursorze, ale
> to w mysql 5
>

A jakby wyglądał taki skrypt?

Pozdrawiam




keczerad - 28-03-2006 00:02

  Michał napisał(a):
>>hmm, no chyba mozna by jakos rekurencje w funkcji zrobic na kursorze, ale
>>to w mysql 5
>>
>
>
> A jakby wyglądał taki skrypt?
>

jednak obeszlo sie bez kursorow

DELIMITER $$

DROP FUNCTION IF EXISTS `baza`.`rekurencja` $$
CREATE FUNCTION `rekurencja`(idi int) RETURNS varchar(255)
BEGIN
declare zwrot varchar(255);
DECLARE niewolnik INT;
SELECT slave, nazwa INTO niewolnik, zwrot FROM produkty_producent
Where id=idi;

if niewolnik != 0 Then

REPEAT

SELECT slave, nazwa INTO niewolnik, zwrot from
produkty_producent Where id=niewolnik;

UNTIL niewolnik = 0 END REPEAT;
End if;

return zwrot;
END $$

DELIMITER ;

--

keczerad

http://www.e-mo.com.pl
sklep w (X)HTML




Michał - 28-03-2006 00:02

  > jednak obeszlo sie bez kursorow
>
> DELIMITER $$
>
> DROP FUNCTION IF EXISTS `baza`.`rekurencja` $$
> CREATE FUNCTION `rekurencja`(idi int) RETURNS varchar(255)
> BEGIN
> declare zwrot varchar(255);
> DECLARE niewolnik INT;
> SELECT slave, nazwa INTO niewolnik, zwrot FROM produkty_producent
> Where id=idi;
>
> if niewolnik != 0 Then
>
> REPEAT
>
> SELECT slave, nazwa INTO niewolnik, zwrot from produkty_producent
> Where id=niewolnik;
>
> UNTIL niewolnik = 0 END REPEAT;
> End if;
>
>
> return zwrot;
> END $$
>
> DELIMITER ;
>

Wielkie dzięki! Jestem w tym temacie troszkę zielony; ale czy zadziała na
MySQL 4.1 czy potrzebuje 5.0?

Pozdrawiam




keczerad - 28-03-2006 00:02

  Michał napisał(a):

> Wielkie dzięki! Jestem w tym temacie troszkę zielony; ale czy zadziała na
> MySQL 4.1 czy potrzebuje 5.0?

ja tez to pierwsza moja funkcja w mysqlu, wlaczylem z tym z godzine, ale
mnie tez bylo potrzebne :), trudno sie przyzwyczaic do tego INTO w
selectcie w porowananiu z mssqlowym set :), co do wersji 4.1 to nie
obsluguje przynajmniej u mnie na 4.1.8 nie chce.

--

keczerad

http://www.e-mo.com.pl
sklep w (X)HTML




yew - 29-03-2006 00:26

  Michał napisał(a):

> Witam
>
> Mam grupy produktów; w takiej, które są w drzewie:
>
> - Samochody
> --Osobowe
> ---BMW
> ---Mercedes
> --Ciężarowe
> ---Iveco
> ---Scania
> - Przyczepy
> --Z jedną osią
> --Z dwiema osiami
>
>
> Grupy te mam zapisane w tabeli:
>
> id | id_glowy | nazwa
>

Pewnie teraz już za późno, ale może przyda Ci się w innej aplikacji:
http://www.dbf.pl/faq/tresc.html?rozdzial=1#o1_9
"Jak zaprojektować tabele do bazy, gdzie relacje 1:wielu mogą się
zagłębiać w nieskończoność?"

--
yew
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    [mysql] =?ISO-8859-2?Q?Za=E6mienie=2E=2E=2E_jak_wy=B6wietli=E6?==?ISO-8859-2?Q?=2E=2E=2E?= [mysql] =?ISO-8859-2?Q?wielko=B6=E6_bazy_a_stabilno=B6=E6=2C?==?ISO-8859-2?Q?_podzia=B3_du=BFej_bazy_a_powi=B1zania_tabel?= [MySQL] =?ISO-8859-2?Q?Wy=B6wietlenie_kolejnej_pozycji=2C_?==?ISO-8859-2?Q?jak=B1_mia=B3by_dany_rekord=2C_gdybym_czyta=B3 _?==?ISO-8859-2?Q?wg_konkretnych_kryteri=F3w=2E_Da_si=EA_=3F?= [mysql 4.0.x] przenoszenie kolum =?ISO-8859-2?Q?mi=EAdzy_bazam?==?ISO-8859-2?Q?i_cd_=2E=2E=2E_?= [MySQL] =?ISO-8859-2?Q?z=B3=B1czenie_tabeli_u=BFytkownik_i?==?ISO-8859-2?Q?_zdj=EAcia_z_wyborem_zdj=EAcia_domy=B6lnego?= Gdzie MySQL 4.1, a gdzie 5.0? [MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?= [MS SQL] "set names" (mySQL) w MS SQL [mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?= MySQL - jak =?ISO-8859-2?Q?wyeksportowa=E6_zawarto=B6=E6_wie?==?ISO-8859-2?Q?lkiej_tabeli?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • own-team.pev.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com