Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyszukiwanie pełno-tekstowe w wielu tablicach
Forum PHP.pl > Forum > Bazy danych > MySQL
Michauuu
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 : )
GwynBleidD
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
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.