Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Strony: 1
Witam
Mam problem z zapytaniem sql. W bazie mam załóżmy 3 tabele
-użytkownicy id
-wybory id_itemu_wybranego id_uzytkownika
-wybory_wyniki id_pierwszego_itemu id_drugiego_itemu wynik_pierwszego wynik_drugiego
No i teraz się zaczyna niezła jazda. Da się tak pewnie zrobić, ale nie znam się na join, union i takich sam, w zasadzie umiem tylko wykonać podstawowy select, update czy insert.
Potrzebuję zliczyć ilość punktów użytkownika o danym id. A ta ilość punktów to ilość (czego?) gdy użytkownik wybrał id_itemu i do tego wynik_pierwszego (gdy wybrał pierwszy) musi być większy od wynik_drugiego lub odwrotnie.
Ktoś ma pomysł jak to ugryźć czy można to zrobić łatwiej? Pewnie przekombinowałem. :)
Do tego - czy w ogóle warto wybierać te dane w taki sposób? Użytkowników może być kilkaset, nie wiem czy nie będzie problemów z wydajnością. Może lepiej punkty obliczać programem i co jakiś czas zapisywać do osobnej kolumny `użytkownicy`.`punkty` ?
Ostatnio edytowany przez poslad (2013-11-11 12:59:18)
Offline
Nic nie zrozumiałem z tego co napisałeś, jedynie to że musisz coś zliczyć. Do tego możesz użyć 'count(nazwa_kolumny)' :).
Offline
No dokładnie, proponuje drugie podejście w napisaniu co potrzeba. Trudny ten polski język. Dobrym pomysłem jest przeczytanie tego co się napisało i próba zrozumienia przed wysłaniem posta.
Offline
moze tak
SELECT u.id, AS id_uzytkownika, SUM(wy1.wynik_pierwszego) AS wynik1, SUM(wy2.wynik_drugiego) AS wynik2 FROM uzytkownicy AS u JOIN wybory AS w ON u.id=w.id_zuytkownika LEFT JOIN wybory_wyniki AS wy1 ON w.id_itemu_wybranego = wy1.id_pierwszego_itemu LEFT JOIN wybory_wyniki AS wy2 ON w.id_itemu_wybranego = wy2.id_pierwszego_temu WHERE (...) -- <--pole do popisu :D
można jeszcze zastosować instrukcję IF aby był jeden wynik, ale to pozostawiam tobie jako zadanie domowe.
Offline
Jak bym zaczął od poprawy projektu tabel. Tabela wybory_wyniki jest bez sensu. Jak się pojawi więcej itemów będziesz sobie dodawał kolejne kolumny? To tyle nie znając logiki i zamiarów twórcy. Autor chyba nie ma zamiaru napisać nic więcej, pewnie już rozwiązał swój problem.
Offline
pewnie tak, no ale my na to nic nie poradzimy :))
Offline
Tak rozwiązałem. Pobrałem wszystko do tablicy i zrobiłem to w języku programowania.
kamikaze napisał(-a):
Jak się pojawi więcej itemów będziesz sobie dodawał kolejne kolumny?
Nie, w zamierzeniu mają być tylko 2 wybory - tak lub nie.
Offline
Wow, to jeszcze gorzej. Na takie sytuacje masz przewidziany tryb boolean. Zrobisz tabele wybory(id_uzytkownika, boolean wybor) i wystarczy. Potem sobie policzysz ile było na tak, ile było na nie, kto była na tak, kto był na nie. To już proste selecty. Tabela tylko dwie kolumny bez strachu o wydajność nawet przy dużej liczbie użytkowników. Liczenie w kodzie jest bez sensu, i pewnie będzie wolniejsze. Pobranie całości i policzenie w kodzie vs pobranie gotowego wyliczonego wyniku.
Offline
@kamikaze, pewnej grupie osób potrzeba na to czasu ;)
Offline
Strony: 1