Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] SELECT nazwa kolumny zależna od nazwy kolumny z innej tabeli
kondor
post 29.11.2014, 16:54:03
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 26.09.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Damonsson
post 29.11.2014, 17:22:55
Post #2





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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;
Go to the top of the page
+Quote Post
kondor
post 29.11.2014, 20:40:34
Post #3





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 26.09.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Damonsson
post 29.11.2014, 20:44:29
Post #4





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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. ');
Go to the top of the page
+Quote Post
kondor
post 29.11.2014, 21:40:59
Post #5





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 26.09.2005

Ostrzeżenie: (0%)
-----



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źć.

Ten post edytował kondor 29.11.2014, 21:41:14
Go to the top of the page
+Quote Post
Damonsson
post 29.11.2014, 21:49:17
Post #6





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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,

Ten post edytował Damonsson 29.11.2014, 21:49:30
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.05.2025 - 13:32