![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 18.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Mam pytanie, czy w mySQL istnieje możliwość wykonania zapytania w poniżej przedstawionym układzie tabel. Mamy tabelę główną, np.:
oraz tabelę poboczną 'z wartościami', przypisanymi do konkretnych rekordów z tabeli 'main':
W tabeli `main` przechowuję sobie jakieś rekordy o unikalnym ID, natomiast w tabeli `vars` przechowuję rekordy posiadające unikalne ID oraz ID rekordu z tabeli `main`, w tej tabeli znajduje się ponad to nazwa zmiennej oraz jej wartość. Przykładowo:
Moje pytanie jest następujące, czy wogóle możliwe jest pobranie rekordów z tabeli 'main' posiadających "przypisane" w tabeli 'vars' wartosci dla pola `varValue`= "2000" oraz jednoczesnie dla pola `varName` wartosc `zmienna1`? Wiem, że można te dwie tabele połączyć np. Left join'em, ale nazwy kolumn będą się powtarzać. Po głowie mi chodzi, aby możliwe było dynamiczne nazwanie kolumn `varName` wartosią pola `varValue` i już łatwo wyszukiwać np. WHERE vars.main_id=main.id AND zmienna1='2000'. Da radę to zrobić w ten sposób? Może macie inny pomysł. Byłbym wdzięczny za jakąś wskazówkę / pomoc. Chodzi mi tutuaj o ładne i w miarę optymalne zapytanie mySQL. Pozdrawiam. Ktoś ma jakiś pomysł jak to zrobić? Czy może jest to nie wykonalne? Ten post edytował starcode 27.03.2008, 15:02:02 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 89 Pomógł: 5 Dołączył: 23.10.2006 Skąd: Gda?sk Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 18.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Sorki. Być może nie wyraziłem się precyzyjnie.
W przypadku uwzględniania jednej zmiennej - TAK. Mi chodziło o to by możliwe było pobranie np. rekordów 'zmienna1' = '2000' i (AND) 'zmienna2'='abc', czyli:
Ale nie działa to niestety ![]() |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 162 Pomógł: 26 Dołączył: 19.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
A może tak:
warunek:
nigdy nie będzie spełniony dlatego twoje zapytanie nie działa. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 18.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
Niestety nie.
Zapytanie to zwraca:
Oczywiście można wykonać GRUP BY `main_id` aby zapobiec powtarzaniu się rekordów, jednak nie zmieni to faktu, że `rekord główny` z ID = 2, nie powinien zostać zwrócony, ponieważ nie posiada zmienna2 o wartości abc (takowy posiada jedynie `rekord główny` z ID = 1). Zapytanie to powinno mieć wszędzie AND'y, czyli np.:
Ale niestety powyższe nie zwraca żadnego wyniku. Ma ktoś jakiś pomysł? Czy faktycznie jest to nierozwiązywalny problem i nikt nie jest w stanie napisać odpowiedniego zapytania SQL? |
|
|
![]()
Post
#6
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
i zaloz index na main_id Tyle ze dla wielu warunkow to bedzie... kiepskie
Nie zwroci ci nic, bo chcesz rekordow w ktorych varName jest jednoczesnie == 'zmienna1' i 'zmienna2', a to jest oczywiscie nie mozliwe ![]() Ten post edytował dr_bonzo 17.04.2008, 03:13:17 -------------------- Nie lubię jednorożców.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 18.06.2006 Ostrzeżenie: (0%) ![]() ![]() |
No właśnie wiem. Dlatego w piewszym poście zapytałem czy da radę jakimś sposobem (mi nie znanym) nazwanie kolumn dynamicznie, czyli kolumny varName przyjmują za nazwę swoją zawartość. Wówczas szło by z górki, szybko i optymalnie...
Ktoś o czymś takim słyszał / jest coś takiego możliwe? |
|
|
![]()
Post
#8
|
|
![]() Grupa: Przyjaciele php.pl Postów: 5 724 Pomógł: 259 Dołączył: 13.04.2004 Skąd: N/A Ostrzeżenie: (0%) ![]() ![]() |
Nie da sie tak "dynamicznie" nazwac kolumn, a nawet gdyby sie dalo to baza i tak by to musiala przetlumaczyc na tak zlozone (lub prostsze - o ile sie da) zapytanie.
Bo nie pytasz o 1 rekord z kilkoma warunkami where, ale o cos bardziej skomplikowanego -------------------- Nie lubię jednorożców.
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 12.06.2025 - 17:26 |