Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [mysql] usuwanie podobnych rekordów
maniana
post 18.05.2007, 10:20:55
Post #1





Grupa: Zarejestrowani
Postów: 207
Pomógł: 44
Dołączył: 18.05.2007

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


Witam, robię serwis z nieruchomościami no i natknąłem się na niemały problem. Mianowice przy wyszukiwaniu ofert muszę założyć taki filtr który omijał by zdublowane oferty ... Oferty z takim samym miastem, ulicą, ilością pięter i powierzchnią są teoretycznie takie same. Z tym, że powierzchnia musi być zaokrąglona do liczby całkowitej...
Teoretycznie oferty:

MIASTO | ULICA | POWIERZCHNIA
------------------------------------------
NazwaMiasta | NazwaUlicy | 999.5
NazwaMiasta | NazwaUlicy | 1000
NazwaMiasta | NazwaUlicy | 1000.5

są takie same...

Pomyślałem, żeby użyć
  1. CONCAT(MIASTO,ULICA,POWIERZCHNIA) AS filtr
i później dać
  1. GROUP BY filtr

Ale pole powierzchnia trzeba by zaokrąglić i nie wiadomo czy w górę czy w dół ... Ktoś ma jakieś pomysły questionmark.gif Wiem, że można to zrobić za pomocą PHP, muszę jednak to zrobić w MySQL

Ma ktoś jakieś pomysły?
Dzięki za jakiekolwiek sugestie

Ten post edytował maniana 18.05.2007, 10:22:11
Go to the top of the page
+Quote Post
Darti
post 18.05.2007, 15:30:22
Post #2





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


Taka sugestia:
Zastosowałbym funkcję MySQLa Round()
Oraz bezcenne wskazówki Sedziwoja z tego tematu

Pozdrawiam


--------------------
The answer is out there, Neo. It's looking for you. And it will find you, if you want it to.
SERVER_SOFTWARE : Apache/2.2.4 (Win32) PHP/5.2.1
MySQL Client API version : 5.0.27
Go to the top of the page
+Quote Post
maniana
post 18.05.2007, 17:15:59
Post #3





Grupa: Zarejestrowani
Postów: 207
Pomógł: 44
Dołączył: 18.05.2007

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


No cóż, round() tutaj wiele nie pomoże
  1. SELECT powierzchnia,concat(miasto,ulica,round(powierzchnia)) AS filtr FROM offer

zwraca nam taki wynik:

1 => 999.5 | NazwaMiastaNazwaUlicy999
2 => 1000.5 | NazwaMiastaNazwaUlicy1000
3 => 1000 | NazwaMiastaNazwaUlicy1000

Rekord 2 i 3 dostały tą samą wartość pola filtr ale rekord pierwszy już nie... Chodzi o to by rekordy 1 i 2 nie zostały zostały wyświetlone. Rekord 3 niby jest najbliższy prawdy ponieważ jego powierzchnia zawiera się pomiędzy powierzchnią rekordu 1 i 2. Takie rozwiązanie wydało mi się najlepsze ale jak widać trzeba by liczby zaokrąglać w dół i w górę (floor i ceiling) ale i tak nie wiadomo kiedy jakie zaokrąglanie wybrać.
Go to the top of the page
+Quote Post
Kicok
post 19.05.2007, 14:25:03
Post #4





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


A skąd MySQL ma wiedzieć, czy chcesz zamieniać 999.5 na 1000, czy na 999? Wydaje mi się, że możesz co najwyżej pobrać średnią wielkość powierzchni dla danego miasta i ulicy a następnie "podobne" wpisy pobierać z warunkiem:

WHERE powierzchnia BETWEEN $avg-1 AND $avg+1


http://dev.mysql.com/doc/refman/5.0/en/gro...ml#function_avg


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
maniana
post 21.05.2007, 09:02:53
Post #5





Grupa: Zarejestrowani
Postów: 207
Pomógł: 44
Dołączył: 18.05.2007

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


Jednak by ominąć takie rekordy trzeba sporo się napocić. Pozostaje jednak sposób opisany powyżej lub sprawdzanie danych przy dodawaniu ofert.
Można jeszcze zaokrąglać powierzchnie do 10 za pomocą
  1. (round(powierzchnia/10)*10))
Jednak 10m2 to dość sporo.

W każdym razie, dzięki za sugestie

Ten post edytował maniana 21.05.2007, 10:18:21
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 Wersja Lo-Fi Aktualny czas: 18.06.2025 - 06:36