Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL] wyszukiwarka w bazie, w kilku tabelach
lukash82
post 11.04.2016, 13:30:04
Post #1





Grupa: Zarejestrowani
Postów: 320
Pomógł: 2
Dołączył: 17.03.2006
Skąd: Siemianowice

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


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, Ł


Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
kapslokk
post 11.04.2016, 13:34:31
Post #2





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


  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]."%'

?
Go to the top of the page
+Quote Post
lukash82
post 11.04.2016, 14:12:47
Post #3





Grupa: Zarejestrowani
Postów: 320
Pomógł: 2
Dołączył: 17.03.2006
Skąd: Siemianowice

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


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...
Go to the top of the page
+Quote Post
kapslokk
post 11.04.2016, 14:33:55
Post #4





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


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.  
Go to the top of the page
+Quote Post
lukash82
post 11.04.2016, 14:41:11
Post #5





Grupa: Zarejestrowani
Postów: 320
Pomógł: 2
Dołączył: 17.03.2006
Skąd: Siemianowice

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


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.
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:31