Jak wykonac takie zapytanie? MYSQL

0

Czesc od wczoraj staram sie napisac pewne zapytanie do bazy. Poddalem sie, nie wiem jak wykonac takie zapytanie, mam nadzieje ze znajdzie sie ktos kto pomoze mi w tym problemie. Otoz co chce wykonac przedstawia sie mniej wiecej tak.

Mamy tabele **WynikiNagrodyGlownej **w ktorej mamy *id,id_wygranego,id_konkursu * oraz druga tabele **KONKURS **w ktorej sa id,nazwa_konkursu i kilka jeszcze innych ale to juz nie ma znaczenia. Tworze relacje miedzy tymi tabelami instrukcja JOIN, gdzie id_konkursu = id w tej tabeli konkurs.

Chcialbym abym mogl dla konkretnego id_usera przy pomocy klauzuli WHERE zobaczyc taki wynik mniej wiecej:

id_usera | id_konkursu|nazwa_konkursu | czy_user_wygral_nagrode_glowna

Jak mozna sie domyslec w kolumnie czy_user_wygral_nagrode_glowna chcialbym aby tworzyly sie wiersze 'TAK' lub 'NIE'.

Generalnie probowalem to w taki sposob, ze chcialem najpierw chcialem wyswietlic konkursy ktory dany user wygral i to jest bardzo prosto osiagnac, ale nie bardzo wiem jak polaczyc to z reszta wynikow aby razem wspolgraly.

0

To jest troszkę bez sensu.

Mamy tabele WynikiNagrodyGlownej w ktorej mamy id,id_wygranego,id_konkursu oraz druga tabele KONKURS w ktorej sa id,nazwa_konkursu i kilka jeszcze innych ale to już nie ma znaczenia. Tworze relacje miedzy tymi tabelami instrukcja JOIN, gdzie id_konkursu = id w tej tabeli konkurs.

Jeżeli bazujemy tylko na tych dwóch tabelach, bez dodatkowej tabeli userów, możemy zebrać co najwyżej wszystkie idki, które kiedykolwiek wygrały w konkursie. Bez bazy wszystkich userów biorących udział w konkursie, będzie ciężko wyznaczyć: czy_user_wygral_nagrode_glowna.
Jeżeli bierzemy pod uwagę pytanie: Czy user kiedykolwiek wygrał nagrodę główną? To przy podanych przez Ciebie informacjach odpowiedź zawsze będzie na TAK.

Sądząc po strukturze bazy na podstawie tych dwóch tabel, nie jestem także w stanie wyznaczyć userów, którzy zajęli chociażby drugie miejsce.

0

To znaczy tak, zapomnialem dodac ze jest jeszcze tabela userow, gdzie mamy kolumne id i joinujemy, ale to i tak mi nic nie daje aby to wykonac.

0

Ja bym zmienił troszeczkę strukturę tabeli: **WynikiNagrodyGlownej **

Tak aby zawierała:
Id,
Id_usera,
Id_konkursu,
wynik

Zmieniłbym jej nazwe na Wyniki_konkursow

Wtedy będzie można nie dość, że sprawdzić czy dany user wygrał dany konkurs, to też, będzie można sprawdzić, które miejsce zajął.

0

Ale tutaj nie chodzi o drugie miejsce. Chodzi mi o sama nagrode glowna. Po prostu dla kazdego usera wyznaczyc wszystkie konkursy a obok kolumna czy dany user wygral ta nagrode glowna czy nie.

0

No moge tak zrobic, chociaz i tak potrzebuje tylko tej jednej danej ale no na przylosc. Tylko do tej pory nie bardzo wiem jak tworzyc zapytania tak jakby z dwoch wynikow i dodatkowo stworzyc tam kolumne ktora bedzie sie odnosila do tych wynikow. Probowalem cos z CASE ale nie wychodzilo niestety.

0

Twoja struktura w tej chwili wygląda tak, że jeżeli user jest podpięty pod konkurs, to automatycznie można od razu wyświetlić mu 'TAK'.

Jeżeli zaś user nie brał udziału w konkursie, można mu automatycznie dopisać 'NIE'.

Nie ma w Twojej strukturze, usera, który wziąłby udział w konkursie i nie wygrał. EDIT: Nie ma więc sensu zupełnie wyświetlać userów, którzy nie brali udziału w konkursach, ergo odpowiedź 'NIE', nigdy nie będzie wykorzystana.

Twój select może więc wyglądać tak:

 
SELECT u.id, k.id, k.nazwa_konkursu, 'TAK' as czy_user_wygral_nagrode_glowna
FROM KONKURS k, WynikiNagrodyGlownej wn, Uzytkownik u
WHERE k.id = wn.id_konkursu 
AND u.id = wn.id_wygranego
AND wn.id_wygranego = JakiesID;

Tyle, że jest to bzdura totalna.

0

To znaczy ja potrzebuje takiego zapytania do php, wiec taki rezultat wydalby mi sie najlepszy. Po prostu potrzebowalbym calej tabeli konkurs ale z dodatkowa kolumna, w ktorej moglbym identyfikowac, czy user wygral nagrode glowna czy nie, ale potrzebowalbym wlasnie calej takiej listy konkursow, ale dla kazdego usera kolumna z tymi wynikami bylaby inna.

0

Masz błąd na poziomie budowy struktury bazy danych. Nie jesteś w tej chwili w stanie wygenerować użytkowników, którzy nie wygrali w konkursie. Możesz jedynie wygenerować użytkowników, którzy nie brali w ogóle udziału w żadnym konkursie. Nie umiem tego prościej wytłumaczyć.

0

To w jaki sposob musialbym polaczyc tabele abym mogl to zobaczyc?

1 użytkowników online, w tym zalogowanych: 0, gości: 1