Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Pobieranie 3 najwyżej ocenianych obrazków.
lukaszgolder
post
Post #1





Grupa: Zarejestrowani
Postów: 141
Pomógł: 17
Dołączył: 2.04.2008
Skąd: z Zabrza

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


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
sowiq
post
Post #2





Grupa: Zarejestrowani
Postów: 1 890
Pomógł: 339
Dołączył: 14.12.2006
Skąd: Warszawa

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


  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?

Ten post edytował sowiq 20.02.2009, 11:35:30
Go to the top of the page
+Quote Post
Crozin
post
Post #3





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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.
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: 21.08.2025 - 13:15