![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 154 Pomógł: 0 Dołączył: 17.12.2003 Skąd: Olsztyn Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Na początek podam ze strukturę bazy znajdziecie pod adresem: http://fallnet.sytes.net/siec-bud/export.jpg. Jesli chcecie poznac przykladowe dane to zapraszam pod adres: http://fallnet.sytes.net/siec-bud/index.php gdzie jest proste menu do wyswietlania danych z tabel co poznacie nizej ![]() Mam problem z sformułowaniem zapytania w sql`u. Sprawa wygląda mniej więcej tak: Mam tabelę z nazwami cech (_cn), tablę z wartościami cech (_cw), tabelę z cechami przypisanymi do produktu (_cp) i tablę produkt (_prod). Strukturę i relacje znajdziecie w linku który podałem powyżej. Dla pewności zamieszczam sql`owe odpowiedniki:
I wszystko było by w porządku, gdyby nie to, że każdy produkt ma WIELE cech. tzn: Kod "SELECT _kat.kn, _cw.cw, _jm.jm_skrot, FROM _kat, _cw, _jm, _cp WHERE _prod.id_prod=_cp.id_prod"; (to zapytanie moze byc nie poprawne) wyswietli mi wszystko za wyjatkiem tego ze podana bedzie jedna cecha (a dokladnie jej wartosc).....czyli np: |kategoria|nazwa|jednostka miary| a (w zaleznosci od ilosci cech) chce otrzymac: |kategoria|nazwa|model|typ|wysokosc|itp......|jednostka miary| to chyba jest cos w stylu tabeli przestawnej? Kompletnie nie wiem jak to rozwiazac... nawet nie jestem pewien czy po prostu w samym php trzeba inaczej pobrac dane? Z góry dziękuje za (p)odpowiedzi pozdrawiam Marcin edit: a jeszcze jedno.. troche poteoretyzuje.. czy przy takiej strukturze tabeli, bede mial mozliwosc rozroznienia produktu i jego cech .. tzn czy nie powinienem dodac jeszcze jedenej tabeli(encji) z _cp.id_cp i _prod.id_prod? Macie jakies sugestie? Ten post edytował Fallout 10.02.2005, 19:47:03 -------------------- ![]() |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 255 Pomógł: 0 Dołączył: 22.04.2004 Skąd: Żoliborz Ostrzeżenie: (0%) ![]() ![]() |
Wnioskuję że chcesz otrzymać w jednym wierszu wszystkie cechy produktu.
Nie mogę się połapać w twoich "skrótach", więc spolszczam ![]()
-------------------- Visual Basic - kto by pomyślał :)
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 154 Pomógł: 0 Dołączył: 17.12.2003 Skąd: Olsztyn Ostrzeżenie: (0%) ![]() ![]() |
Cytat(popbart @ 2005-02-11 01:32:57) Wnioskuję że chcesz otrzymać w jednym wierszu wszystkie cechy produktu. Nie mogę się połapać w twoich "skrótach", więc spolszczam ![]()
Niestety źle wywnioskowałeś ![]() ![]() pozdro i dzieki ![]() edit: odkryłem czemu mi nie działa ta funkcja.. stary mysql.. ![]() ![]() Ten post edytował Fallout 11.02.2005, 05:48:19 -------------------- ![]() |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 255 Pomógł: 0 Dołączył: 22.04.2004 Skąd: Żoliborz Ostrzeżenie: (0%) ![]() ![]() |
Cytat a mi chodzi wlasnie o to aby kazda ta cecha byla w osobnej kolumnie...da sie tak zrobic? A po co ? (moim zdaniem się nie da) W php robisz explode('|',$tablica['cecha']) i masz wszystko oddzielone ![]() -------------------- Visual Basic - kto by pomyślał :)
|
|
|
![]()
Post
#5
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
IMHO lepiej (wydajniej) jest zrobic 2 osobne zapytania. Mialem kilka dni temu akurat ten sam "problem", bo robilem maly sklepik na zaliczenie i tez mialem uniwersalne cechy. Info o produkcie pobieram w 2 zapytaniach, jedno pobiera info z tabeli produktow, a drugie wszystkie cechy (lacznie z ich nazwami z tabeli slownika cech).
-------------------- Brak czasu :/
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 154 Pomógł: 0 Dołączył: 17.12.2003 Skąd: Olsztyn Ostrzeżenie: (0%) ![]() ![]() |
Cytat(popbart @ 2005-02-11 10:58:00) A po co ? (moim zdaniem się nie da) W php robisz explode('|',$tablica['cecha']) i masz wszystko oddzielone ![]() Ok.. to zrob mi na tym sortowanie, dodawanie i usuwanie oraz wyszukiwanie rekordow to cie złotem obsypie ![]() ![]() Cytat IMHO lepiej (wydajniej) jest zrobic 2 osobne zapytania. Mialem kilka dni temu akurat ten sam "problem", bo robilem maly sklepik na zaliczenie i tez mialem uniwersalne cechy. Info o produkcie pobieram w 2 zapytaniach, jedno pobiera info z tabeli produktow, a drugie wszystkie cechy (lacznie z ich nazwami z tabeli slownika cech). A byłbyś taki miły i wkleił przykładowy kod? Ja juz sobie go przerobie odpowiednio ![]() Ten post edytował Fallout 11.02.2005, 14:46:32 -------------------- ![]() |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 255 Pomógł: 0 Dołączył: 22.04.2004 Skąd: Żoliborz Ostrzeżenie: (0%) ![]() ![]() |
Cytat Post powyzej pokazuje ze chyba jednak sie da Co się da!? Przecież chciałeś mieć to w osobnych kolumnach(jednym zapytaniem) a on robi dwa zapytania Cytat Ok.. to zrob mi na tym sortowanie, dodawanie i usuwanie oraz wyszukiwanie rekordow to cie złotem obsypie Jak byś używał postgresa to by nie było problemu: robisz podzapytanie from( i tu dajesz zwykłego select'a łączącego z sortowaniem). A tak chcesz robić zaawansowane żeczy na prymitywnej bazie. Można zrobić coś takiego: group_concat(cechy.nazwa order by cechy.nazwa separator '|') ale to tylko sortuje wewnetrzne cechy produktu Wyszukiwanie ? A co za problem dać odpowiedni where ? W dodawaniu lub edytowaniu pewnie nie obędzie się bez dwóch zapytań, ale wtedy operujesz tylko na jednym produktcie i to zupełnie inny select. Cytat Info o produkcie pobieram w 2 zapytaniach, jedno pobiera info z tabeli produktow, a drugie wszystkie cechy (lacznie z ich nazwami z tabeli slownika cech) A jak chcesz wyświetlić 50 produktów, to co, robisz 51 zapytań? -------------------- Visual Basic - kto by pomyślał :)
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 154 Pomógł: 0 Dołączył: 17.12.2003 Skąd: Olsztyn Ostrzeżenie: (0%) ![]() ![]() |
Cytat(popbart @ 2005-02-11 18:58:17) 1) Co się da!? Przecież chciałeś mieć to w osobnych kolumnach(jednym zapytaniem) a on robi dwa zapytania 2) Jak byś używał postgresa to by nie było problemu: robisz podzapytanie from( i tu dajesz zwykłego select'a łączącego z sortowaniem). A tak chcesz robić zaawansowane żeczy na prymitywnej bazie. Można zrobić coś takiego: group_concat(cechy.nazwa order by cechy.nazwa separator '|') ale to tylko sortuje wewnetrzne cechy produktu Wyszukiwanie ? A co za problem dać odpowiedni where ? W dodawaniu lub edytowaniu pewnie nie obędzie się bez dwóch zapytań, ale wtedy operujesz tylko na jednym produktcie i to zupełnie inny select. 1) A wiec tak w manualu czytamy..."This function returns a string result with the concatenated non-NULL values from a group" czyli mi tworzy kolumne np. cechy i jako wartosc sumuje je w lancuch z rozdzielnikiem np % czy | ... a właśnie tu jest pies pogrzebany aby te CECHY były KOLUMNAMI . Wiec jak widzisz nie o to mi chodzilo.... 2) Nie bede dostosowywal serwera baz do bazy bo to mija sie z sensem.. to baza ma sie dostosowac.. nie bede przeciez instalowal nowego serwera SQL pod jedna baze... -------------------- ![]() |
|
|
![]()
Post
#9
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 717 Pomógł: 0 Dołączył: 12.06.2002 Skąd: Wolsztyn..... Studia: Zielona Góra Ostrzeżenie: (0%) ![]() ![]() |
Cytat A jak chcesz wyświetlić 50 produktów, to co, robisz 51 zapytań? Nie mam potrzeby wyswietlania naraz wielu produktow i cech do nich. Po wybraniu kategorii wyswietlam podstawowe info o produkcie z tabeli z produktami, a po kliknieciu na produkt wyswietla sie juz jego szczegolowy opis ze wszystkimi danymi z tabeli produktow oraz cechami. @Fallout: poszlo na PM -------------------- Brak czasu :/
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 255 Pomógł: 0 Dołączył: 22.04.2004 Skąd: Żoliborz Ostrzeżenie: (0%) ![]() ![]() |
Cytat 2) Nie bede dostosowywal serwera baz do bazy bo to mija sie z sensem.. to baza ma sie dostosowac.. nie bede przeciez instalowal nowego serwera SQL pod jedna baze... W twoim przypadku to aplikacja się dastosuje do serwera (bedzie robiła masę selectów i życzę jej powodzenia) ![]() Inwestycja w PostgreSQL będzie owocowała nie tylko w tej bazie, jeszcze dojdziesz do takiego wniosku ![]() A tak w ogóle to jest tylko problem z sortowaniem bo w wyszukiwaniu nie ma problemu (polecenie where wykonuje się przed group by) Pozdrawiam, Bartek P -------------------- Visual Basic - kto by pomyślał :)
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 02:49 |