Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP/MYSQL] Wyszukiwarka
Reptile ReX
post 12.04.2011, 16:42:46
Post #1





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 19.01.2008

Ostrzeżenie: (0%)
-----


Chcę zrobić wyszukiwarkę, która wyświetla wpierw wyniki po title a potem po opisie.

Wydaje się proste:
  1. SELECT * FROM tabela WHERE MATCH (title,opis) AGAINST ('fraza')

Ale mam pewien problem ponieważ opis i title znajdują się w innych tabelach.

Jak się za to zabrać aby wyświetlić wpierw wyniki które posiadają frazę w title a potem te które posiadają frazę w opisie?

Proszę o pomoc.

Ten post edytował Reptile ReX 12.04.2011, 11:57:23
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
pmir13
post 12.04.2011, 17:15:16
Post #2





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

Ostrzeżenie: (0%)
-----


Jaka jest struktura tych tabel? Rozumiem, że masz oddzielone tytuły i opisy po to, by można było wstawiać różne opisy dla danego tytułu przez wielu użytkowników?
Czemu nie możesz po prostu użyć dwóch kolejnych zapytań, osobno dla tytułu i osobno dla opisu, skoro i tak php to potem wypluwa?
Go to the top of the page
+Quote Post
Reptile ReX
post 12.04.2011, 20:31:07
Post #3





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 19.01.2008

Ostrzeżenie: (0%)
-----


Jeżeli użyję po sobie 2ch zapytań to otrzymuję duplikaty, czyli niekiedy takie same wyniki ponieważ np fraza znajduję się w tytule i w opisie.
Ja nie wiem dlaczego jest title i opis w osobnych tabelach, bo tutaj chodzi o proste forum, ja tylko poprawiam wyszukiwanie po kimś.
Go to the top of the page
+Quote Post
PiterosWeb
post 12.04.2011, 20:39:23
Post #4





Grupa: Zarejestrowani
Postów: 48
Pomógł: 2
Dołączył: 2.10.2010
Skąd: Piotrków Trybunalski

Ostrzeżenie: (0%)
-----


musisz zastosować JOIN i ORDER BY w ten sposób chyba będzie najprościej.
Go to the top of the page
+Quote Post
pmir13
post 12.04.2011, 21:49:54
Post #5





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

Ostrzeżenie: (0%)
-----


  1. SELECT * FROM tytuly WHERE MATCH ( title ) AGAINST ('fraza')
  2. SELECT * FROM tytuly LEFT JOIN opisy ON opis.idtytulu = tytuly.id
  3. WHERE MATCH (opisy.opis) AGAINST ('fraza') AND !MATCH ( tytuly.title ) AGAINST ('fraza')


Ten post edytował pmir13 12.04.2011, 21:50:47
Go to the top of the page
+Quote Post
Reptile ReX
post 12.04.2011, 23:37:53
Post #6





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 19.01.2008

Ostrzeżenie: (0%)
-----


Dzięki wielkie.

A teraz mam jeszcze jedno pytanie.

Chcę wyświetlić tylko 300 znaków opisu ale w taki sposób, aby wyszukiwana fraza (załóżmy niech to będzie $_GET['szukaj']) znajdowała się w tym okrojonym tekście.

Dokładniej:

Chcę wyciągnąć z bazy danych 300 znaków z pola opis w taki sposób, aby zawsze zawarta była w nim fraza z GET'a.

Czy jest to możliwe ? Jak się za to zabrać?

Ja osobiście pomyślałem o strpos i substr, ale jakoś nie mogę ułożyć sobie tego w głowie, dlatego proszę o ew. wskazówki, abym mógł wykonać coś takiego.

Pozdrawiam

Ten post edytował Reptile ReX 12.04.2011, 23:40:50
Go to the top of the page
+Quote Post
pmir13
post 13.04.2011, 00:20:23
Post #7





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

Ostrzeżenie: (0%)
-----


  1. $okrojonytekst = substr( $calytekst, strpos( $calytekst, $fraza ) - $znakowprzedfraza, 300 );

Go to the top of the page
+Quote Post
Reptile ReX
post 13.04.2011, 00:24:37
Post #8





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 19.01.2008

Ostrzeżenie: (0%)
-----


Dzięki
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 20:23