[MYSQL] Pytanie dot. sposobu "formowania" zapytań
: 16 lip 2013, 09:22
Witam.
Właśnie jestem w trakcie pisania programu do katalogowania części elektronicznych (dla mojego użytku, póki co nie zamierzam dzielić się pracą bo mało jej
) i mam pewnego rodzaju "dylemat" jeżeli chodzi o sformowanie zapytania do bazy... ale do rzeczy
Mam kilka tablic
Elementy (ID, Nazwa, ID_grupy)
Wartości (ID, wartość)
Grupy (ID, NazwaGrupy, ID_parametru)
Parametry (ID, Nazwa, Jednostka)
Powiązania między grupami i parametrami
Powiązania między elementami i wartościami
(kilka słów komentarza dlaczego tak to wymyśliłem, jak już powiedziałem zamierzam stworzyć bazę z elementami elektronicznymi a one mają to do siebie że każdy z nich ma inne parametry (rodzaje) więc nie mogłem przypisać na stałe parametrów do elementu. Oraz, dane grupy elementów np. "rezystory drutowe" mają taką samą listę parametrów, z tąd też przypisuję parametry do grupy, a nie do elementu)
I teraz chcę wyświetlić... Nazwę elementu, wszystkie jego parametry i wartości tych parametrów do tej pory zrobiłem 3 procedury wyświetlające mi 3 tabele z odpowiednio
nazwami elementów z danej grupy
rodzajami parametrów
I wartościami tych parametrów (jako war_parametru1, war_par2, war_par3, war_par1 itd...)
Program do zarządzania pisze w QT więc nie będę miał problemu z wyświetlaniem tego jeśli jest to w takiej postaci. Więc póki co wszystko jest cacy
Ale teraz w przypadku kiedy będę chciał filtrować elementy (np. rezystory tylko na wielkie R
) już mi się robi sieczka, bo za jeszcze jak lista parametrów mi się nie zmienia tak już ich ilość (i co lepsze) kolejność (bo mogę również sortować) się zmienia...
Czy ktoś ma pomysł jak w miarę prosty sposób zrealizować takie zapytanie? spróbować zapisać wyszukiwanie nazw elementów i parametrów w jednym zapytaniu,, czy jakoś inaczej?
Pozdrawiam zawisza
Poniżej zamieszczam kod moim procedur
jak ktoś ma jakieś uwagi co do procedur to chętnie posłucham, domyślam się że to co napisałem to pewnie straszny syf
Właśnie jestem w trakcie pisania programu do katalogowania części elektronicznych (dla mojego użytku, póki co nie zamierzam dzielić się pracą bo mało jej

Mam kilka tablic
Elementy (ID, Nazwa, ID_grupy)
Wartości (ID, wartość)
Grupy (ID, NazwaGrupy, ID_parametru)
Parametry (ID, Nazwa, Jednostka)
Powiązania między grupami i parametrami
Powiązania między elementami i wartościami
(kilka słów komentarza dlaczego tak to wymyśliłem, jak już powiedziałem zamierzam stworzyć bazę z elementami elektronicznymi a one mają to do siebie że każdy z nich ma inne parametry (rodzaje) więc nie mogłem przypisać na stałe parametrów do elementu. Oraz, dane grupy elementów np. "rezystory drutowe" mają taką samą listę parametrów, z tąd też przypisuję parametry do grupy, a nie do elementu)
I teraz chcę wyświetlić... Nazwę elementu, wszystkie jego parametry i wartości tych parametrów do tej pory zrobiłem 3 procedury wyświetlające mi 3 tabele z odpowiednio
nazwami elementów z danej grupy
rodzajami parametrów
I wartościami tych parametrów (jako war_parametru1, war_par2, war_par3, war_par1 itd...)
Program do zarządzania pisze w QT więc nie będę miał problemu z wyświetlaniem tego jeśli jest to w takiej postaci. Więc póki co wszystko jest cacy


Czy ktoś ma pomysł jak w miarę prosty sposób zrealizować takie zapytanie? spróbować zapisać wyszukiwanie nazw elementów i parametrów w jednym zapytaniu,, czy jakoś inaczej?
Pozdrawiam zawisza
Poniżej zamieszczam kod moim procedur


Kod: Zaznacz cały
CREATE DEFINER=`root`@`%` PROCEDURE `getElementsNames`(IN cat_name VARCHAR(45), IN level INT)
BEGIN
SELECT idelementy, nazwa_elementu FROM `test`.`elementy` WHERE `elementy`.`id_grupy`= (SELECT idgrupy FROM `test`.`grupy` WHERE `test`.`grupy`.`grupy_nazwa` = cat_name AND `test`.`grupy`.`grupy_level` = level);
END
CREATE DEFINER=`root`@`%` PROCEDURE `getParametersList`(IN cat_name VARCHAR(45), IN level INT )
BEGIN
SELECT nazwa_parametru, jednostka FROM test.parametry
WHERE test.parametry.idparametry IN (SELECT parametr_ID FROM test.wiazania_parametryGrupa WHERE grupa_ID = (SELECT idgrupy FROM test.grupy WHERE test.grupy.grupy_nazwa = cat_name AND test.grupy.grupy_level = level) );
END
CREATE DEFINER=`root`@`%` PROCEDURE `getParametersValues`(IN cat_name VARCHAR(45), IN level INT)
BEGIN
SELECT wartosci FROM test.wartosci
WHERE test.wartosci.idwartosci IN ( SELECT ID_wartosci FROM test.wiazanie_elementyWartosci
WHERE ID_elementu IN (SELECT idelementy FROM test.elementy
WHERE (test.elementy.id_grupy = ( SELECT idgrupy FROM test.grupy
WHERE grupy_nazwa = cat_name AND grupy_level = level )
)
)
);
END