Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie 3 najwyżej ocenianych obrazków.
Forum PHP.pl > Forum > Bazy danych > MySQL
lukaszgolder
Mam 2 tabele w bazie danych jedna z nich to `galeria` a druga to `rankingi`

rankingi:
id | total_votes | total_value | used_ids

I chcę pobrać z bazy 3 najwyżej ocenione obrazki. Miało by to wyglądać mniej więcej tak:

  1. SELECT * FROM `galeria` ORDER BY (SELECT `total_value`/`total_votes` WHERE *) DESC LIMIT 3


Problem pojawia się w miejscu z *, gdyż pola id w bazie `rankingi` wyglądają tak:

news1, news15, obrazek1, obrazek3 itd

chciałem to zrobić jakoś tak:

WHERE `id`='obrazek'+galeria.id

Ma ktoś jakiś inny pomysł lub powie mi jak napisać moją wersje, aby działała?
sowiq
  1. SELECT g.*, r.pole1 AS nazwa_pola1, r.pole2 AS nazwa_pola2
  2. FROM galeria g
  3. LEFT JOIN rankingi r ON (r.id = g.id)
  4. ORDER BY (r.total_value / r.total_votes) DESC LIMIT 3


Może tak?
Crozin
Masz źle zaprojektowaną bazę.

1) Tabela galerie powinna zawierać kolumnę z rankingiem, który przy dodaniu/usunięciu każdej oceny jest przeliczany na nowo. Pozwoli to na wykonywanie prostych zapytań typu
  1. SELECT * FROM galerie ORDER BY ranking DESC LIMIT 0, 3;
Oczywiście tabela rankingi nadal zostaje.
2) Tabela rankingi. ID powinno wskazywać na ID. A jeżeli ma wskazywać na ID kilku różnych elementów (news, obrazek) to powinna być dodatkowa kolumna określająca czy rekord dotyczy się newsa, obrazka czy czegos tam. Później zapytanie wygląda mniej-więcej tak
  1. SELECT * FROM rankingi WHERE item_id = 23 AND item_type = 1;
item_type może być typem numeryczny (wtedy zkładasz, że 1 = obrazek, 2 = news itd.) lub ENUM.
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-2025 Invision Power Services, Inc.