Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] wyszukiwarka w bazie
Forum PHP.pl > Forum > Przedszkole
lukash82
Witam,

Próbuję ogarnąć zapytanie mysql do wyszukiwarki z bazy danych.

Mam taką strukturę w dużym uproszczeniu.

Tabela główna (Główna): ID / NAZWA / TREŚĆ

Tabela dodatkowa 1 (dodatkowa 1): ID / ID_ALL / COL 1 / COL 2...
Tabela dodatkowa 2 (dodatkowa 2): ID / ID_ALL / COL 1 / COL 2...

Powiązane są ze sobą Główna ID = dodatkowa 1/2 ID_ALL

Mam nadzieję, że jasno to opisałem.

I teraz wyszukuję w tabeli głównej zadanego ciągu z wyszukiwarki (zakładam np. 3-wyrazową frazę):

  1. "SELECT * FROM glowna WHERE tresc LIKE '%".$slowo[0]."%' OR tresc LIKE '%".$slowo[1]."%' OR tresc LIKE '%".$slowo[2]."%'"


I to działa dobrze.

Jednak chciałbym powiązać wyszukiwane wyniki z tymi dodatkowymi tabelami. Kontynuując zakładam dalej 3-wyrazową frazę:

  1. "SELECT * FROM glowna A, dodatkowa1 B, dodatkowa2 C WHERE (A.tresc LIKE '%".$slowo[0]."%' OR A.tresc LIKE '%".$slowo[1]."%' OR A.tresc LIKE '%".$slowo[2]."%') AND A.id=B.id_all AND A.id=C.id_all"


Podejrzewam, że jest jakiś byk w tym zapytaniu ale nie bardzo wiem gdzie. Pewnie coś pochrzaniłem z tymi operatorami OR LIKE i nawiasami... No chyba, że ogólnie źle sobie to wymyśliłem. Jeśli może mnie ktoś naprowadzić na jakieś rozwiązanie to proszę bardzo. Pozdrawiam, Ł


kapslokk
  1. SELECT
  2. *
  3. FROM
  4. glowna g
  5. LEFT JOIN dodatkowa1 B ON g.ID = B.ID_ALL
  6. LEFT JOIN dodatkowa2 C ON g.ID = C.ID_ALL
  7. WHERE g.tresc LIKE '%".$slowo[0]."%' OR g.tresc LIKE '%".$slowo[1]."%' OR g.tresc LIKE '%".$slowo[2]."%'

?
lukash82
Cześć,

Super, o to chodziło. Zafixowałem się na tych LIKE, OR, etc.

Mam jeszcze jedno drobne pytanie do powyższego przykładu. Generalnie wyszukuję w "główna", ale tam też znajdują się klucze powiązane powiedzmy z dodatkowa 3, z której nie chciałbym otrzymywać wyników. Analogicznie do Twojego rozwiązania zrobiłem tak:
  1. SELECT
  2. *
  3. FROM
  4. glowna g
  5. LEFT JOIN dodatkowa1 B ON g.ID = B.ID_ALL
  6. LEFT JOIN dodatkowa2 C ON g.ID = C.ID_ALL
  7.  
  8. LEFT JOIN dodatkowa3 D ON g.ID != D.ID_ALL
  9.  
  10. WHERE g.tresc LIKE '%".$slowo[0]."%' OR g.tresc LIKE '%".$slowo[1]."%' OR g.tresc LIKE '%".$slowo[2]."%'


Ale coś tu chyba znów przekombinowałem...
kapslokk
Raczej bym kombinował coś w stylu:

  1. SELECT
  2. *
  3. FROM
  4. glowna g
  5. LEFT JOIN dodatkowa1 B ON g.ID = B.ID_ALL
  6. LEFT JOIN dodatkowa2 C ON g.ID = C.ID_ALL
  7.  
  8. LEFT JOIN dodatkowa3 D ON g.ID = D.ID_ALL
  9.  
  10. WHERE ( g.tresc LIKE '%".$slowo[0]."%' OR g.tresc LIKE '%".$slowo[1]."%' OR g.tresc LIKE '%".$slowo[2]."%' ) AND D.ID IS NULL
  11.  
lukash82
Cześć,

No właśnie D.id nie jest NULL.

Ale tak teraz myślę, że chyba muszę zmienić nieco podejście do tematu. Zobaczę co z tego mi wyjdzie... Dzięki za pomoc.
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.