Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyszukiwanie pełno-tekstowe w wielu tablicach
Michauuu
post 4.01.2011, 22:05:30
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
GwynBleidD
post 5.01.2011, 01:52:51
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ę smile.gif) to już dopięcie do tego trzeciego będzie trudniejsze, ale nie mówię że się nie da 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 smile.gif
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: 29.06.2025 - 02:18