Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MYSQL] Wyszukiwanie rekordów dwuczłonowych
Forum PHP.pl > Forum > Bazy danych > MySQL
lysy2005
Witam, mamy najprostsze zapytanie wyszukujące:
Ad.1
  1. [/b]SELECT * FROM tabela WHERE pole = 'Szukana fraza'[b]


rekordy w polu 'pole':
Bielsko Biała
Zielona Góra
Lądek Zdrój etc....

Czyli rekordy dwuczłonowe.

Chciałbym rozdzielić je pauzą, czyli wysłać zapytanie sql:
Ad.2
  1. [/b] SELECT * FROM tabela WHERE pole = 'Bielsko-Biała'[b]

oraz:
Ad.3
  1. [/b] SELECT * FROM tabela WHERE pole = 'BielskoBiała'[b]

A wynik był taki jak w Ad.1 czyli zwracał:
Bielsko Biała
Zielona Góra
Lądek Zdrój


Jaki warunek dodać przy wyszukiwaniu żeby ładnie automatycznie to działało, z góry dziękuję za odpowiedź.
wookieb
Uzyć polecenia LIKE w bazie danych.
http://dev.mysql.com/doc/refman/5.0/en/pattern-matching.html
lysy2005
Cytat(wookieb @ 19.01.2009, 13:31:10 ) *


np LIKE '-' dodać? - nie działa.
Mam w bazie "Bielsko Biała" Chce wpisać "Bielsko-Biała", "BielskoBiała" i żeby mi znalazło w bazie z Like nie działa, chyba ze coś źle stosuje, możesz napisać przykład wookieb?
wookieb
Jeżeli chcesz tak zaawansowanie to wtedy
http://dev.mysql.com/doc/refman/5.0/en/ful...l-language.html

Pole w którym zapisujesz dane musi być typu fulltext. Pamiętaj, że przy dużej ilości rekordów może to działać bardzo wolno.

Druga metoda to rozbijanie stringa na części
Kod
$wyrazy=preg_split('/[\s|-]/', $szukanaFraza);
foreach($wyraz az &$wyraz)
{
$wyraz='pole LIKE "%'.$wyraz.'%"';
}
$sql='SELECT * FROM table WHERE '.implode(' AND ', $wyrazy);

Ale nie zadziała to w przypadku 'BielskoBiała';
lysy2005
ok, działa wszystko ok. Dzięki!

Teraz zostało jak wpisze 'BielskoBiała' żeby wyszułał Bielsko Biała, jak to zrobić smile.gif?
wookieb
  1. <?php
  2. $wyrazy=preg_split('/[s|-]+/', $szukanaFraza);
  3.  
  4. $wszystkieWyrazy=array();
  5.  
  6. foreach($wyrazy as $wyraz)
  7. {
  8.    preg_match_all('/[A-ZĆŃŚŹŻ][a-ząćłęńśżźó]+/', $wyraz, $matches);
  9.    if(isset($matches[0]) && count($matches[0])>1)
  10.    {
  11.        $wszystkieWyrazy=array_merge($wszystkieWyrazy, $matches[0]);
  12.    }
  13.    else $wszystkieWyrazy[]=$wyraz;
  14. }
  15.  
  16. foreach($wszystkieWyrazy as &$wyraz)
  17. {
  18.    $wyraz='pole LIKE "%'.$wyraz.'%"';
  19. }
  20.  
  21. $sql='SELECT * FROM table WHERE '.implode(' AND ', $wszystkieWyrazy);
  22. ?>
zegarek84
  1. <?php
  2. $string='BielskoBiała'; //lub $string='Bielsko-Biała'; wszystko zwróci 'Bielko Biała'
  3. $szukane=preg_replace('/([A-ZĆŃŚŹŻ]{1}[a-ząćłęńśżźó]+)[^A-ZĆŃŚŹŻ]*([A-Z]{1}[a-ząćłęńśżźó]+)/u', '1 2', $string);
  4. echo $szukane;
  5. ?>
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.