Mam pytanie, czy w mySQL istnieje możliwość wykonania zapytania w poniżej przedstawionym układzie tabel.
Mamy tabelę główną, np.:
CREATE TABLE main( id int NOT NULL AUTO_INCREMENT PRIMARY KEY, name varchar(96) );
oraz tabelę poboczną 'z wartościami', przypisanymi do konkretnych rekordów z tabeli 'main':
CREATE TABLE vars( id int NOT NULL AUTO_INCREMENT PRIMARY KEY, main_id int NOT NULL, varName varchar(96), varValue varchar(96) );
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:
INSERT INTO `main` VALUES(NULL, 'rekord główny 1'); INSERT INTO `main` VALUES(NULL, 'rekord główny 2'); INSERT INTO `vars` VALUES(NULL, '1', 'zmienna1', '2000'); INSERT INTO `vars` VALUES(NULL, '1', 'zmienna2', 'abc'); INSERT INTO `vars` VALUES(NULL, '1', 'zmienna3', 'def'); INSERT INTO `vars` VALUES(NULL, '1', 'zmienna4', 'jakas inna wartość'); INSERT INTO `vars` VALUES(NULL, '2', 'zmienna1', '2000'); INSERT INTO `vars` VALUES(NULL, '2', 'zmienna5', 'kolejna wartosc'); INSERT INTO `vars` VALUES(NULL, '2', 'zmienna6', 'wartosc zmiennej 6'); INSERT INTO `vars` VALUES(NULL, '2', 'zmienna9', 'unikalna przykładowa wartosc');
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?