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!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2013-11-11 12:58:54

  poslad - Użytkownik

poslad
Użytkownik
Zarejestrowany: 2012-12-26

Trudne zapytania mysql i pytanie o wydajność

Witam
Mam problem z zapytaniem sql. W bazie mam załóżmy 3 tabele

Kod:

-użytkownicy
id

Kod:

-wybory
id_itemu_wybranego
id_uzytkownika

Kod:

-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

 

#2  2013-11-11 13:14:56

  sqrtek - Użytkownik

sqrtek
Użytkownik
Skąd: /bin/true
Zarejestrowany: 2012-06-14

Re: Trudne zapytania mysql i pytanie o wydajność

Nic nie zrozumiałem z tego co napisałeś, jedynie to że musisz coś zliczyć. Do tego możesz użyć 'count(nazwa_kolumny)' :).


"Nie pozwól by zgiełk opinii innych ludzi, zagłuszył Twój wewnętrzny głos" ~ Steve Jobs

Offline

 

#3  2013-11-11 13:41:17

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: Trudne zapytania mysql i pytanie o wydajność

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

 

#4  2013-11-16 22:16:58

  jezoo - Dzięcioł

jezoo
Dzięcioł
Skąd: Z lasu
Zarejestrowany: 2005-09-02

Re: Trudne zapytania mysql i pytanie o wydajność

moze tak

Kod:

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.


LRU #480459

Offline

 

#5  2013-11-16 23:36:44

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: Trudne zapytania mysql i pytanie o wydajność

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

 

#6  2013-11-17 12:50:03

  jezoo - Dzięcioł

jezoo
Dzięcioł
Skąd: Z lasu
Zarejestrowany: 2005-09-02

Re: Trudne zapytania mysql i pytanie o wydajność

pewnie tak, no ale my na to nic nie poradzimy :))


LRU #480459

Offline

 

#7  2013-11-17 22:56:28

  poslad - Użytkownik

poslad
Użytkownik
Zarejestrowany: 2012-12-26

Re: Trudne zapytania mysql i pytanie o wydajność

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

 

#8  2013-11-18 13:44:39

  kamikaze - Administrator

kamikaze
Administrator
Zarejestrowany: 2004-04-16

Re: Trudne zapytania mysql i pytanie o wydajność

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

 

#9  2013-11-22 16:08:54

  jezoo - Dzięcioł

jezoo
Dzięcioł
Skąd: Z lasu
Zarejestrowany: 2005-09-02

Re: Trudne zapytania mysql i pytanie o wydajność

@kamikaze, pewnej grupie osób potrzeba na to czasu ;)


LRU #480459

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)