Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kłopotliwe zapytanie
Forum PHP.pl > Forum > Bazy danych > MySQL
dob
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....
beton
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
dob
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.