Wpis z mikrobloga

Mirki, przyszło Wam kiedyś robić w #mysql sortowanie wyników oparte o kilka kolumn, z których każda ma inną wagę w %?

Przykładowo, mam tabelę z kolumnami: ID, name, date, count, lastupdate.

Kolumna date ma mieć wagę 30%.

Kolumna count ma mieć wagę 10%.

Kolumna last
update ma mieć wagę 60%.

Pytanie, jak rozbudować zapytanie

SELECT * FROM tabela ORDER BY last_update, date, count
żeby sortowanie uwzględniało wagi?

Chodzi mi o to, że rekord z najwyższym lastupdate zwykle będzie pierwszy, ale nie zawsze!

Czasem może zdarzyć się tak, że pierwszy będzie rekord z najwyższym date lub nawet count (które ma tylko 10% wagi).

#mysql #bazydanych #algorytmy #webdev #sql #programowanie
  • 18
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@kot1401: Wydaję mi się, że nie powinieneś tego rozpatrywać na poziomie bazy tylko użyć narzędzia, które przetworzy najpierw te dane. Musisz się opierać wtedy na jakiś wartościach liczbowych.
  • Odpowiedz
@kot1401: robiłem coś podobnego w postgreSQL i użyłem do tego autorskiej funkcji, zapytanie wygląda tak: SELECT date, count, lastupdate, sorting(date, count, lastupdate) AS ration FROM tabela ORDER BY ratio DESC
  • Odpowiedz
@aaandrzeeey: Ale jesli te dane w kolumnach sie nei zmieniaja za czesto to moim zdaniem bedzie trigger (czy tam procedura) i wyliczanie tych wartosci przy insercie czy aktualizacji i potem tylko korzystanie z tego w ORDER BY zamiast liczenie tego przy selekcie dla kazdego rekordu....
  • Odpowiedz
zamiast liczenie tego przy selekcie dla kazdego rekordu....


@msq: Tak. to odpada. dane musza być w bazie. perzliczanie zajmie masę czasu.

1)Ten min/max mogą być zapisane w konfigu - jako wartości graniczne. Nie będzie trzeba tego przebudowaywać po każdym insercie/apdejcie. Jest to uproszczenie. Ale może okazać się
  • Odpowiedz