Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyciąganie rekordów według kolejności warunków
Forum PHP.pl > Forum > Bazy danych > MySQL
bartoszp90
Witam serdecznie.

Mam tabelę użytkowników, w tabeli jest pole imię i nazwisko. Chcę zrobić wyszukiwarkę jak na FB, problem z bazą danych, bo jeśli ktoś w wyszukiwarce wprowadzi "tomek kowalski", ja rozdzielę to na 2 frazy to potem chciał bym zrobić zapytanie z warunkiem w stylu:

WHERE
(imie LIKE '%$fraza1%' AND nazwisko LIKE '%$fraza2%' )
OR (nazwisko LIKE '%$fraza1%' AND imie LIKE '%$fraza2%' )
OR nazwisko LIKE '%$fraza1%'
OR nazwisko LIKE '%$fraza2%'
OR imie LIKE '%$fraza1%'
OR imie LIKE '%$fraza2%'

Za pomocą tego warunku wyjął bym wszystko co chce, problem tylko z kolejnością, najpierw powinny wyjść rekordy które posiadają imię podane jak fraza 1 oraz nazwisko jak fraza 2 lub na odwrót, potem te rekordy u których tylko pole nazwisko zawiera jedną z 2 fraz, a następnie te które tylko pole imię zawiera którąś z tych fraz.

Moje pytanie to czy da się w zapytaniu ustalić taką kolejność w zależności od spełnionych warunków ?

Jeśli ktoś ma jakiś inny pomysł na rozwiązanie tego tematu to też chętnie posłucham smile.gif
Crozin
1. Relacyjne bazy danych średnio nadają się do tego typu zadań. Pomyśl nad wykorzystaniem narzędzi typu SOLR czy Sphinx.
2. Mógłbyś to osiągnąć poprzez coś takiego:
  1. SELECT
  2. id, imie, nazwisko, ...,
  3. (imie LIKE '%$fraza1%' AND nazwisko LIKE '%$fraza2%' ) AS sort_1,
  4. (nazwisko LIKE '%$fraza1%' AND imie LIKE '%$fraza2%' ) AS sort_2,
  5. ...,
  6. (imie LIKE '%$fraza2%') AS sort_6
  7. FROM
  8. tbl_name
  9. WHERE
  10. sort_1 OR sort_2 OR ... OR sort_6
  11. ORDER BY
  12. sort_1 DESC, sort_2 DESC, ... sort_6 DESC;
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.