Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP,MySQL]Wyszukiwarka wielowątkowa.
Forum PHP.pl > Forum > PHP
Greg0
Witam tworzę wyszukiwarkę na stronę, która sprawdza zawartość w dwóch tabelach i podaje wyniki w dwóch pętlach jedną odpowiedzialną za jedną baze i w drugiej za drugą bazę. W internecie znalazłem sposób na stronicowanie wyników ale nie potrafię ich zastosować w tym skrypcie. Zlicza ona całość wyników i dzieli je na strony w określonej ilości. Problemu nie ma gdy szukana fraza znajduje się w jednej tabeli bo ładnie wtedy stronicuje. Pojawia się gdy fraza znajdzie się w dwóch tabelach wtedy rekordy wyświetla mi po np. 5 z jednej tabeli i po 5 z drugiej tabeli. Myślałem, że możnaby było zrobić jakąś  funkcję obliczeniową która zwracała by mi limit dla każdego zapytania tak aby wyświetlić w sumie 5 rekordów z obydwu tabel na stronę.

zamieszczam kod

  1.  
  2.  
  3. //polaczenie i zdefiniowanie PREFIX oraz zdefiniowanie funkcji porcjowanie
  4.  
  5. $porcjowanie=porcjowanie($aktualnie, $licz[0], $na_stronie, "?site=search&search=$_SESSION[search]&", "");
  6. echo "<div id=porcjowanie>$porcjowanie</div>";
  7.  
  8. $t_search = $_GET['search'];
  9. $results = Array();
  10. $tables=array('films', 'serials');
  11. foreach($tables as $table) {
  12. if($table=="films"){
  13. $ergebnis=mysql_query("SELECT * FROM ".PREFIX."films WHERE ( `film_tytul` LIKE '%$t_search%' OR film_tags LIKE '%$t_search%' ) ORDER BY film_id LIMIT $aktualnie, $na_stronie");
  14. }
  15. elseif($table=="serials") {
  16. $ergebnis= mysql_query("SELECT * FROM ".PREFIX."serials, ".PREFIX."serials_cat WHERE ( s_tytul LIKE '%$t_search%' OR s_tags LIKE '%$t_search%') AND s_scid=scat_id ORDER BY s_id LIMIT $aktualnie, $na_stronie");
  17. }
  18. while($ds=mysql_fetch_array($ergebnis)) {
  19. if($table=="films") {
  20.   echo $ds[film_tytul];
  21. }
  22. if($table=="serials") {
  23.   echo $ds[s_tytul];
  24. }
  25.  
  26. }
  27. }



Małe objaśnienie 

$licz[0] - zawiera ilość rekordów w sumie z obydwu tabel

$na_stronie - ilość rekordów wyśw. na stronie

Przykład działania w obecnej chwili:

wyszukuję frazę "miecz"

1. gdy fraza zostanie znaleziona tylko w tabeli films znajdzie np. 7 filmów "ogniem i mieczem" i wyświetli 5 na pierwszej stronie i 2 na drugiej

2. Gdy fraza zostanie znaleziona w obu tabelach znajdzie 7 filmów "ogniem i mieczem" i 6 seriali "wiedźmin", zatem wyświetli  5 "ogni" i 5 "wiedźminów" na pierwszej oraz 2 "ognie" i 1 "wiedźmin" na 2 stronie.




A w drugim przypadku chciałbym aby wyświetlało 5 ogni na pierwszej 2 ognie na drugiej i 3 wiedźminy na drugiej oraz 2 wiedźminy na trzeciej. Może być też w innej kombinacji ale mam nadzieję że opisałem zrozumiale zasadę działania.
thek
A nie prościej użyć UNION przy zapytaniu i potem się dalej bawić? Zamiast się bawić dwoma zapytaniami do bazy i kombinowanie z łączeniem wyników, masz jedno zapytanie i obrabiasz dane jak chcesz potem już.
Greg0
Próbowałem z tym ale w zapytaniu UNION musi być tyle samo pól, a w tych tabelach tak nie jest. 
dr_bonzo
To dodaj "NULL, NULL, ... " w polach w SELECT tak aby ilosc i typ sei zgadzal
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.