Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] SELECT nazwa kolumny zależna od nazwy kolumny z innej tabeli
Forum PHP.pl > Forum > Bazy danych > MySQL
kondor
Zaraz zgłupieję, siedzę na tym całą noc i pół dnia i nie mogę wymyślić.

Mam dwie tabele Vote oraz Photo.

Chciałbym stworzyć zapytanie, które w zależności od wartości Photo.votefor pobierało wartość kolumny Vote.[Photo.votefor] .

Za cholerę nie wiem czy się da i jak się da. Może macie jakieś pomysły?

Najprościej czyli
  1. SELECT Photo.*, Vote.*, Photo.votefor AS vo, Vote.vo AS wartosc
nie działa. Zapewne o czymś nie wiem. Może wystarczy to vo w Vote.vo wziąć w jakiś nawias czy coś żeby MySQL wiedział, że to ma być część nazwy kolumny?
Pojęcia nie mam.


p.s.
Mogę też zrobić to inaczej. Mam wszystkie wartości Vote w zmiennej PHP wcześniej wyciągniętej i w zapytaniu robilbym po prostu
  1. SELECT Photo.*, ".$vote[Photo.votefor]."
ale w tym wypadku też Photo.votefor nie jest przekazywane jako wartość tylko po prostu słowa.


Proszę o pomoc bo mi andrzejkowy weekend przelatuje pomiędzy palcami smile.gif
Damonsson
Coś w tym stylu:
  1. SELECT votefor FROM Photo LIMIT 1 INTO @colname;
  2. SET @query = CONCAT('SELECT Photo.*, Vote.*, Vote.', @colname, ' AS wartosc');
  3.  
  4. PREPARE stmt FROM @query;
  5. EXECUTE stmt;
kondor
Dziękuję. Pomogło. Nawet bardzo.

Jeszcze tylko jedno małe - czy ta konstrukcja wymaga całości zapytania w SET CONCAT? Czy gdzieś później jest jeszcze miejsce żeby się pobawić, robić JOIN Itd? Czy wszystko w tym miejscu? Nigdy nie korzystałem z tego typu zapytań dlatego wolę dopytać.

Ale jest super - w końcu ruszyłem smile.gif
Damonsson
Nie wiem czy dobrze Cię zrozumiałem, ale CONCAT binduje Ci tylko tę dynamiczną nazwę kolumny, możesz sobie tam pisać dowolne zapytania typu

  1. SET @query = CONCAT(
  2. 'SELECT Photo.*, Vote.*, Vote.', @colname, ' AS wartosc FROM table
  3. JOIN table2 ON a = fk_a
  4. ... i tak dalej
  5. ');
kondor

Jednak jeszcze mały problem się pojawił.

Wiesz może jak to zapętlić? Gdy wybieram wartosci na początku potem w set są one stałe, a mi zależy na tym aby wybrać maksa po przeleceniu wszystkich Photo i sprawdzeniu na które było najwięcej głosów. Czyli ta wartość @colname powinna być uzależniona od Photo.id w SET.

Nie mam pojęcia jak to ugryźć.
Damonsson
Szczerze mówiąc nie chcę mi się myśleć, ale zastanów się, czy nie lepiej zaprojektować poprawnie bazę danych, żeby nie trzeba było robić takich kombinacji alpejskich,
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.