![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 17.03.2007 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Mam dwie tabele połączone trzecią (połączenie n:m).
Tablica: localization; Kolumny: localizationID [PK], localizationIP, localizationName, localizationComment Tablica: products; Kolumny: productsID [PK], productsName, productsVersion, productsType Tablica łącząca: localizationProducts; Kolumny: localizationID [PK], [i]productsID [PK] Tablica products zawiera produkty pogrupowane na 3 typy (productsType). Wyciągam dane localizationIP, productsName i teraz pytanie jak wyciągnąć powyższe dane z mała zmianą. Zamiast productsName chciałbym wyciągnąć trzy kolumny dla poszczególnych productsType. Aktualnie mam zapytanie:
co daje wynik: Kod IP Produkt1 Produkt2 Produkt3 10.8.3.9 Nazwa3 10.8.3.9 Nazwa2 10.8.3.9 Nazwa1 Jak usunę p.productsType z GROUP BY mam wynik: Kod IP Produkt1 Produkt2 Produkt3 10.8.3.9 Nazwa1 Efekt jaki chciałbym osiągnąć to: Kod IP Produkt1 Produkt2 Produkt3 10.8.3.9 Nazwa1 Nazwa2 Nazwa3 POMOCY!!! ![]() Ten post edytował Dexiu 4.03.2009, 11:43:20 -------------------- wydawało mi sie że umię programować w PHP
WIEM ŻE NIC NIE WIEM |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 781 Pomógł: 256 Dołączył: 29.06.2008 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 17.03.2007 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Nic nie daje.
A doszedł jeszcze jeden problem, a mianowicie jeśli dwa lub więcej produktów ma jakiś jeden typ to wypisuje tylko jeden produkt. Próbowałem dodać group_concat w if'ach ale robi mi wtedy wszystkie produkty w kolumnie. Zapytanie:
Wynik Kod IP Produkt1 Produkt2 Produkt3 10.8.3.9 Nazwa1,Nazwa2,Nazwa3,Nazwa4 Jak dodam w group by p.productsType to mam: Kod IP Produkt1 Produkt2 Produkt3
10.8.3.9 Nazwa3 ,Nazwa4 10.8.3.9 Nazwa2 10.8.3.9 Nazwa1 Ten post edytował Dexiu 4.03.2009, 11:42:50 -------------------- wydawało mi sie że umię programować w PHP
WIEM ŻE NIC NIE WIEM |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 3 Dołączył: 3.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
hi
wynikiem polaczenia jest iloczyn kartezjanski, dostajesz wiec zbior wynikowych wierszy ty probujesz na sile te wiersze strescic do jednego wiersza - musisz wiec zadac takie zapytanie ktore w wyniku da jedna krotke - da sie to zrobic rozbudowujac (i przy okazji gmatwajac zapytanie) ale czy nie lepiej sposob prezentacji pozostawic juz php ? kolejna rzecz: jak chcesz miec prezentowane wyniki gdy dla danej lokalizacji bedzie np. 50 produktow typu Produkt 3, a z pozostalych typow nie bedzie zadnego produktu ? |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 17.03.2007 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
wynikiem polaczenia jest iloczyn kartezjanski, dostajesz wiec zbior wynikowych wierszy Oki, to jest dla mnie jasne. ty probujesz na sile te wiersze strescic do jednego wiersza - musisz wiec zadac takie zapytanie ktore w wyniku da jedna krotke - da sie to zrobic rozbudowujac (i przy okazji gmatwajac zapytanie) Świetnie i tu pytanie "Jak to zrobić??" ale czy nie lepiej sposob prezentacji pozostawic juz php ? Nie, nie lepiej gdyż przesłanie danych w powiedzmy 5 razy większej ilości wierszy wogóle mnie nie urządza. To co tu opisuję to tylko kilka kolumn z kilkudziesięciu które będę przesyłał (baza jest w innym miejscu niż interpreter php). I stąd próba odpytania serwera MySQL o jak najmniejszą liczbę danych. Wysłanie kilka do kilkunastu razy większej ilości danych odpada. kolejna rzecz: jak chcesz miec prezentowane wyniki gdy dla danej lokalizacji bedzie np. 50 produktow typu Produkt 3, a z pozostalych typow nie bedzie zadnego produktu ? Nie ma możliwości aby było dużo produktów (tablica zawiera dużo rekordów które służą do wpisywania 5 grup produktów zawierających po kilka produktów w kilkuset wersjach - nie ma możliwości aby było więcej niż kilka produktów w kolumnie - nie może występować w jednej lokalizacji produkt w kilku wersjach) natomiast kolumny w których nic nie ma, powinny wyświetlać puste. Ten post edytował Dexiu 4.03.2009, 12:56:32 -------------------- wydawało mi sie że umię programować w PHP
WIEM ŻE NIC NIE WIEM |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 3 Dołączył: 3.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
Nie ma możliwości aby było dużo produktów (tablica zawiera dużo rekordów które służą do wpisywania 5 grup produktów zawierających po kilka produktów w kilkuset wersjach - nie ma możliwości aby było więcej niż kilka produktów w kolumnie - nie może występować w jednej lokalizacji produkt w kilku wersjach) natomiast kolumny w których nic nie ma, powinny wyświetlać puste. konkretnie: w danej lokalizacji masz: 2 produkty o typie Produkt1, 0 produktow o typie Produkt2, 3 produkty o typie Produkt3 jaka chcesz miec wynik (poprosze wierszami) |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 17.03.2007 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Kod IP | Produkt1 | Produkt2 | Produkt3 |
---------------------------------------------------- 10.8.3.9 | NP11,NP12 | | NP31,NP32,NP33 | -------------------- wydawało mi sie że umię programować w PHP
WIEM ŻE NIC NIE WIEM |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 3 Dołączył: 3.03.2009 Ostrzeżenie: (0%) ![]() ![]() |
Kod IP | Produkt1 | Produkt2 | Produkt3 | ---------------------------------------------------- 10.8.3.9 | NP11,NP12 | | NP31,NP32,NP33 | zmienia to troche postac rzeczy i nadal uwazam ze da sie to znacznie optymalniej rozwiazac, ale jezeli jestes uparty ![]() Kod SELECT l.localizationIP,
GROUP_CONCAT(DISTINCT p1.productsName) AS "Produkt 1", GROUP_CONCAT(DISTINCT p2.productsName) AS "Produkt 2", GROUP_CONCAT(DISTINCT p3.productsName) AS "Produkt 3" FROM localization l LEFT JOIN products p1 ON p1.productsType = "Produkt1" AND EXISTS (SELECT * FROM localizationproducts lp WHERE lp.localizationID = l.localizationID AND lp.productsID = p1.productsID) LEFT JOIN products p2 ON p2.productsType = "Produkt2" AND EXISTS (SELECT * FROM localizationproducts lp WHERE lp.localizationID = l.localizationID AND lp.productsID = p2.productsID) LEFT JOIN products p3 ON p3.productsType = "Produkt3" AND EXISTS (SELECT * FROM localizationproducts lp WHERE lp.localizationID = l.localizationID AND lp.productsID = p3.productsID) WHERE l.localizationID = 1 GROUP BY l.localizationID |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 17.03.2007 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Ok dzięki działa.
Pozdrawiam. -------------------- wydawało mi sie że umię programować w PHP
WIEM ŻE NIC NIE WIEM |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 03:30 |