Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyszukiwanie pełno-tekstowe w wielu tablicach
Michauuu
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 13.06.2010

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


Cześć wszystkim,
Próbuję napisać wyszukiwarkę opartą o wyszukiwanie pełno-tekstowe MyISAM.
Trochę się już tym pobawiłem, teraz trzeba wreszcie wziąć się do pisania.

Problem w tym, że nie wiem jak zrobić wyszukiwanie dla wielu tablic.
Tak to wygląda dla pojedynczych, gdy chcemy znaleźć artykuł, wiadomość lub użytkownika.
  1. $resultart = mysql_query("select * from `art` where match(`art`.`temat`, `art`.`treść`) against('".$search."' in boolean mode) and `ban`!=1;");
  2. $resultmsg = mysql_query("select * from `msg` where match(`msg`.`temat`, `msg`.`treść`) against('".$search."' in boolean mode) and `usunięto`!=1;");
  3. $resultusr = mysql_query("select * from `usr` where match(`usr`.`imię`, `usr`.`nazwisko`, `usr`.`miasto`) against('".$search."' in boolean mode) and `aktywowane`=1;");
Pomóżcie mi przekształcić to w pojedyncze zapytanie, które przeszuka wszystkie 3 tablice.
Z góry Dzięki i wszystkiego naj w nowym roku : )
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
GwynBleidD
post
Post #2





Grupa: Zarejestrowani
Postów: 28
Pomógł: 9
Dołączył: 16.01.2010
Skąd: Kraków

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


O ile pierwsze dwa zapytania da się ze sobą połączyć stawiając między nimi UNION (bo chyba mają bardzo podobną strukturę (IMG:style_emoticons/default/smile.gif) ) to już dopięcie do tego trzeciego będzie trudniejsze, ale nie mówię że się nie da (IMG:style_emoticons/default/biggrin.gif)

  1. (SELECT `art`.`temat` AS `temat, `art`.`treść` AS `treść, {tu wypisać musisz całą resztę kolumn z art i msg w podobny sposób}, NULL AS `imię`, NULL AS `nazwisko`, NULL AS `miasto` FROM `art` WHERE match(`art`.`temat`, `art`.`treść`) against('".$search."' IN BOOLEAN mode) AND `ban`!=1) UNION
  2. (SELECT `msg`.`temat` AS `temat, `msg`.`treść` AS `treść, {tu wypisać musisz całą resztę kolumn z art i msg w podobny sposób}, NULL AS `imię`, NULL AS `nazwisko`, NULL AS `miasto` FROM `msg` WHERE match(`msg`.`temat`, `msg`.`treść`) against('".$search."' IN BOOLEAN mode) AND `ban`!=1) UNION
  3. (SELECT NULL AS `temat`, NULL AS `treść`, ....., `usr`.`imię` AS `imię`, `usr`.`nazwisko` AS `nazwisko`, `usr`.`miasto` AS `miasto` FROM `usr` WHERE match(`usr`.`imię`, `usr`.`nazwisko`, `usr`.`miasto`) against('".$search."' IN BOOLEAN mode) AND `aktywowane`=1)


Nie wiem, czy się gdzieś nie pomyliłem, powinno działać. Da się to chyba prościej przenieść np na PDO, gdyż tam możesz rozdzielać zapytania średnikiem (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 7.10.2025 - 04:30