Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Kłopotliwe zapytanie
dob
post
Post #1





Grupa: Zarejestrowani
Postów: 166
Pomógł: 0
Dołączył: 30.01.2003
Skąd: Warszawa

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


Witam, zwaracam się z prośbą o pomoc w ułożeniu kodu SQL

mam 2 tabele
1) Tabela foto która międzyinnymi zawiera id zdjęcia (id), ilość oddanych na to zdjecie głosów (lglosow) oraz ich sumę (suma)
2) Tabela votes która zawiera takie informacje jak id zdjęcia (fotoid) ocene (ile) oraz kto taką ocenę wystawił (who)

Chciałbym wybrać 25 id z tabeli foto których ocena jest najlepsza. Problem w tym że ocene liczę w następujący sposób :
od sumy odejmuje najwyższą i najmniejszą wystawioną ocenę dla tego zdjęcia oraz dziele przez liczbę głosów którą pomniejszam o 2.
Działanie wygląda mniej więcej tak :
Kod
(`suma` - max( ile ) - min( ile )
) / ( `lglosow` -2 )

Oczywiscie 25 wyników chciałbym posortowac od największego do najmniejszego.

I teraz pytanie czy to jest w ogole wykonalne przy takiej konstrukcji tabel questionmark.gif Ja tego nie potrafie zrobić (w ogole nie bardzo mam pojęcie o mysql sad.gif )

Za wszelką pomoc serdecznie dziękuje.

[edit]
Oczywiscie do łączenia z bazą wykorzystuje php, może jakies działania na tablicach czy cos....

Ten post edytował dob 12.01.2006, 22:21:41


--------------------
Go to the top of the page
+Quote Post
beton
post
Post #2





Grupa: Zarejestrowani
Postów: 13
Pomógł: 2
Dołączył: 5.11.2003
Skąd: Tarnowskie Góry

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


Tak jest to możliwe, daj mi 20 minut no góra godzinke bo jestem teraz troche zajęte i ułoże to zapytanko smile.gif

Najlepiej podejślij mi struktury, i jakies przykładowe dane tongue.gif Nie lubie pracować "na sucho" biggrin.gif

  1. SELECT f.id,((sum(v.ile) - (max(v.ile) + min(v.ile)) ) / (f.lglosow-2)) AS c
  2. FROM foto f,votes v WHERE v.fotoid=f.id GROUP BY f.id ORDER BY c DESC LIMIT 25


Powinno działac, jak chodzi coś nie tak wyslij strukturki i przykladowe dane smile.gif

Ten post edytował beton 12.01.2006, 23:37:33


--------------------
Impossible is nothing.
php is for idiots, i'm using php version 5
Go to the top of the page
+Quote Post
dob
post
Post #3





Grupa: Zarejestrowani
Postów: 166
Pomógł: 0
Dołączył: 30.01.2003
Skąd: Warszawa

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


Dzięki wielkie exclamation.gif
tak wygląda po moich przeróbkach smile.gif

  1. SELECT foto.*, (
  2. (
  3. foto.suma
  4. ) - max( votes.ile ) - min( votes.ile )
  5. ) / ( foto.lglosow -2 ) AS c
  6. FROM foto, votes
  7. WHERE votes.fotoid = foto.id AND foto.lglosow >=10 AND foto.oceny <2
  8. GROUP BY foto.id
  9. ORDER BY c DESC LIMIT 25


Co najwazniejsze działa!!
Jeszcze raz serdeczne dzięki!


[edit]
Jeszcze jedno pytanko
chciałem zsumować to;
  1. ((sum( foto.suma ) - max( votes.ile ) - min( votes.ile )) / ( foto.lglosow -2 ))
i całość podzielić przez sum(foto.id)

Utworzyłem taki kod :
  1. SELECT sum(
  2. (
  3. (
  4. sum( foto.suma ) - max( votes.ile ) - min( votes.ile ) ) / ( foto.lglosow -2 )
  5. )
  6. ) / sum( foto.id )
  7. FROM foto, votes
  8. WHERE votes.fotoid = foto.id AND foto.autor = 'ktoś'

No i jak zapewne się domyślasz nie działa i znów proszę tym razem chyba poraz ostatni o pomoc.

Pozdrawiam

Ten post edytował dob 13.01.2006, 01:19:31


--------------------
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 Aktualny czas: 19.08.2025 - 22:39