Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwanie rdzenia slowa bez koncowek (polskich odmian slow)
Forum PHP.pl > Forum > Bazy danych > MySQL
lexis72
Witam,
Chcialbym zrobic na portalu mini galerie w profilach uzytkownikow w ktorych wyswietlalyby sie ich zdjecia znalezione w galerii glownej. Zrobilbym to w ten sposob ze przy wyswietlaniu zdjec dal warunek aby pokazywalo tylko te zdjecia z galerii w ktorych tytulach jest nick danego uzytkownika. Problem jest taki ze w tytulach dzieki naszemu pieknemu polskiemu jezykowi Nicki uzytkownikow sa czesto rozne od oryginalu np Adam moze w tytule pojawic sie pod postacią Adama czy Adamowi a bardziej wyrafinowane nicki jak Pozeczka14 pod postacią Pozeczce, Pozeczki14 itp Macie jakis pomysl jak ustawic wyszukiwanie aby znalazlo mi jak najwieksza liczbe opcji? Zdaje sobie sprawe ze moze nie odnalezc wszystkich zdjec jesli nick w tytule bedzie naprawdę bardzo roznil sie od oryginalu ale natknelem sie kiedys na tym forum na typy wyszukiwań w ktorych szukalo po rdzeniu slowa. Czy ktos cos o tym slyszal? Ewentualnie bede myslal o wyszukiwaniu pierwszych kilku liter ale to trudno bedzie zrobic bo jedne nicki sa krotkie jak Adam a drugie dluzsze jak Pozeczka14.
Szymciosek
Takie przykłady:
Nick / Nazwa pliku jpg

Adam / Adam_wakacje.jpg
Adam / Adam_kot.jpg
Adam12 / Adam12_chiny.jpg
Pozeczka14 / Pozeczka14_wakacje_w_indonezji.jpg
Pozecze / Pozecze_pole.jpg

Ja bym tu zastosował preg_match z czymś takim jak:

  1. $username = 'Adam_';
  2.  
  3. $files = array(
  4. 'Pozeczka14_wakacje.jpg',
  5. 'Pozeczka14_koty.jpg',
  6. 'Adam_londyn.jpg',
  7. 'Adam14_chiny.jpg'
  8. );
  9.  
  10. $filesPerUser = array();
  11.  
  12. foreach ($files as $file)
  13. {
  14. if (preg_match("#^$username#", $file))
  15. {
  16. $filesPerUser[] = $file;
  17. }
  18. }
  19.  
  20. print_r('<pre>');
  21. print_r($filesPerUser);
  22. print_r('</pre>');


Username w systemie zawsze na koniec otrzymuje "_" (podkreślnik)
Zdjęcia użytkowników składają się z
{username}_{title}.{extension}
lexis72
Szymciosek zle mnie zrozumiales. Nazwy samych plikow czyli zdjec na serwerze to ciągi liczb. Mi chodzilo o tytuly zapisane do nich w bazie danych a te maja forme zwyklych zdan np: Adomowi zepsuł się samochód. (i zdjecie Adama przy zepsutym aucie). Te zdjecia sa w glownej galerii. W 90 procentach zdjecia sa dodawane przeze mnie. Zauwazylem ze prawie w kazdym w tytule umieszczam nick osoby ktora jest na zdjeciu wiec pomyslalem ze fajnie byloby gdyby kazdy uzytkownik w profilu mial dostep do swoich zdjec - w gruncie rzeczy nie wrzuconych przez niego ale oznaczonych w tytulach - cos jak na Facebooku ze dodajesz zdjecie i oznaczasz kogos w tytule.

Czyli mamy tu doczynienia z sytuacją w której w bazie danych mam tabele photos w ktorej jest kolumna z nazwa zdjecia FILENAME (najczesciej ciagi cyfr przedstawiajace date i godziny czyli standard z aparatow) oraz tytulem jaki sobie do niego wymyslilem czyli FILETITLE. I teraz pytanie jak okreslic warunek WHERE przy zapytaniu do bazy danych aby znalazlo jak najwiecej zdjec bo jesli dam taki jaki nick to w przypadku ADAM znajdzie tylko te ktore maja w tytule ADAM a nie znajdzie juz przykladowego ADAMOWI zepsul sie samochod.
Szymciosek
Może tak:
Kod
SELECT * FROM `userfile` WHERE `filename` LIKE "%Adam%"


Lub:
Kod
SELECT * FROM `userfile` WHERE `filename` REGEXP '^Adam'


A sama baza wygląda tak:
https://dl.dropboxusercontent.com/u/2123959...0%3A22%3A11.png
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.