Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Podobne rekordy w bazie mysql
Forum PHP.pl > Forum > Bazy danych > MySQL
kajzur
Witam.. Czy istnieje takie zapytanie które by jakoś posegregowało mi bazę danych wg podobnych rekordów? I mam na myśli coś lepszego niż order by.

Rekordów jest ponad 10 tys.
YaQzi
skoro masz na mysli coś lepszego niż order by to powiedz co masz na myśli. Przykład?
kajzur
Może powiem co dla mnie w tym przypadku znaczy "podobny" - tzn długość może być rózna. Podobne to takie które mogą mieć białe znaki np:

alaa jest podobny do al aa

mogą różnić się brakiem polski znaków, np:

wąż podobny jest do waz

itp.. Mam w bazie danych tekst od userów. Niektórzy wpisują z polskimi znakami, niektórzy bez, czasami jakies dziwne spacje znikąd wstawiają.. Chciałbym to jakoś ogarnać, bo duplikaty nie są mi potrzebne..
alegorn
poszukaj algorytm levenshteina
o ile wiem, sa juz gdzies gotowe procedury na mysql...



hmmmm nawet juz znalazlem : http://www.artfulsoftware.com/infotree/queries.php

j.
kajzur
Rozumiem że Ci chodzi o http://www.artfulsoftware.com/infotree/queries.php#552 ?smile.gif Tylko że ta funkcja to ona sobie przyjmuje 2 varchary.. Więc Jak ja mogę to puścić po całej tabeli? I ogólnie to wklejając tę funkcje w phpmyadmin jako zapytanie sql to wypluwa błędy;>

Ps. Widze tez implelentacje tej funkcji w PHP. Dużym overkiller może byc pobranie danych i puszcze przez tę funkcje?

  1. foreach($e as $t){
  2.  
  3. foreach($e as $o){
  4. if(levenshtein(ciach($t->tresc, 255), ciach($o->tresc,255))<4 and $t->tresc[1]==$o->tresc[1]){
  5.  
  6. echo $t->id.' podobne jest do '.$o->id.'<br>czyli:<span style="color:red;">'.$t->tresc.' <u style="color:blue;">podobne</u> do '.$o->tresc.'</span><br>';
  7.  
  8.  
  9. }
  10. }
  11. }

Taki kodzik i działa spoko. Dzięki za pomoc!
Tomplus
pewnie chodzi Ci o zapytani GROUP BY

  1. SELECT id FROM produkt GROUP BY model ORDER BY nazwa ASC, model ASC";


tylko że jak będziesz miał 3 podobne rekordy to zrobi się z tego 1 w wyniku.
alegorn
@kajzur:: - tam miałeś przykład 2 funkcji (poczytaj o funkcjach i procedurach składowanych)
dla mnie jest to wygodniejsze, ale w php tez zadziała tak samo.

aby to się mogło wykonać - musisz mieć możliwość zakładania procedur i funkcji
powiem uczciwie ze jeśli tego nie robiłeś wcześniej - a nie jesteś fascynatem mysql'a to lepiej to zrobić w php smile.gif,
z poziomy samego mysql'a to jeszcze musiałbyś utworzyć dodatkowo procedurę z cursor'em zrobić i przejść po wszystkich rekordach. da się wink.gif

@Tomplus:: nie chodzi o takie same rekordy, ale o podobne! group by nie zadziała tutaj.
kajzur
Zadziałało tak jak chciałem w PHP smile.gif Mysql znam, ale jak widać... Nie jakoś super smile.gif
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.