Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwarka z 2 tabeli
Forum PHP.pl > Forum > Bazy danych > MySQL
banki
Witam,

mam pewien problem z wyszukiwarką.

W tabeli sql mam 2 kolumny tytul i opis. Dla przykładu zawartość tytul to "Metallica - Nothing else matters" a w opisie dałem formułkę "Lorem ipsum...".

Próbuję zrobić wyszukiwarkę aby wpisując "Metallica Lipsum" zwróciła mi właśnie ten rekord. Póki co nawet nie zwraca mi tego rekordu jeśli wpisuje "Metallica else".

  1. SELECT * FROM wideo WHERE tytul LIKE '%$szu%' OR tytul LIKE '$szu%' OR tytul LIKE '%$szu' OR opis LIKE '%$szu%' OR opis LIKE '$szu%' OR opis LIKE '%$szu'


Nie mam pojęcia jak sformułować zapytanie, o ile w ogóle da się takowe zrobić w jednym ciągu.

Z góry dzięki za pomoc
Scalak
może coś w stylu:

SELECT concat(tytul,' ',opis) as tym FROM wideo having tym regexp '(Metallica|Lipsum)'

odpowiednie wyrażenie regularne pozostawiam Twoim rozważaniom wink.gif

Przedświąteczna Pozdrówka
Scalak
Pyton_000
Po 1 primo robienie
Cytat
LIKE '%cos%' OR LIKE 'cos%' OR LIKE '%cos'

jest totalną bzdurą która nic nie daje. Wyrażenia "%cos%" zaspokaja wszystkie ww. więc 2 pozostałe nie dadzą żadnego pozytywnego efektu.

Po 2 secundo skoro szukasz "Metallica Lipsum" to ta fraza jest szukana w CAŁOŚCI pomiędzy wyrazami. Poza tym taka fraza nie występuje u Ciebie w żadnym polu.
Tak samo jest z "Metallica else". Nie występuje jako taki podany ciąg. Bo "Metallica - Nothing else matters" nie zawiera dokładnie takiego ciągu "Metallica else".

Musiałbyś każdą spację zamieniać na % co jest lekko mówiąc szaleństwem.
banki
Cytat(Pyton_000 @ 22.12.2013, 15:46:50 ) *
Musiałbyś każdą spację zamieniać na % co jest lekko mówiąc szaleństwem.


Więc jak zrobić takową wyszukiwarkę?
Scalak
a moje zapytanie jest złe?
banki
Cytat(Scalak @ 26.12.2013, 23:35:03 ) *
a moje zapytanie jest złe?


nie pokazuje mi wyników jeśli wpiszę np Metallica else, chyba że ja coś źle robię
bo podmieniłem tekst wpisany w wyszukiwarkę tutaj:
having tym regexp '($szukaj|$szukaj)'
Scalak
  1. SELECT concat(tytul,' ',opis) AS tym FROM wideo HAVING tym REGEXP '(Metallica|Lipsum)'


przetestuj bezpośrednio przez phpmyadmin na konkretnych danych. U mnie działa.
Concat "sumuje" dwie kolumny, odziela je spacją. Having jest odpowiednikiem where (odsyłam do googli). Regexp pozwala wyszukiwane wyrażenie podać w postaci wyrażenia regularnego.

Jeśli Ci nie będzie działac umieść proszę na jakiejś wklejce dump Twoich tabel - zerknę.
mmmmmmm
HAVING jest odpowiedniekim WHERE... Niezłe... smile.gif Zwłaszcza w zapytaniach nie-agregujących... Ustaw sobie SQL_MODE na ANSI, a się przekonasz, czy masz rację.
Scalak
a czy ja napisałem że w nieagregujących? Użyłem swoistej analogi do zapytania zaproponowanego przez autora wątku - złej? Nie wnikam w agregację... sądzę, że Go to .......
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-2024 Invision Power Services, Inc.