ďťż

[PHP & mySQL] Dwa zapytania i jedno stronicowanie. Jak?

       

Podstrony


telcocafe

Otóż mam dwa zapytania:
#------------ zapytanie dla tabeli artykułów ------------# $query = 'SELECT * FROM `'.prefix.'articles` WHERE `title` LIKE "%'.$word.'%" OR `text` LIKE "%'.$word.'%" LIMIT '.$start.', '.$limit.''; $result = mysql_query($query); #------------ zapytanie dla tabeli newsów ---------------# $query_news = 'SELECT * FROM `'.prefix.'news` WHERE `title` LIKE "%'.$word.'%" OR `text` LIKE "%'.$word.'%" LIMIT '.$start.', '.$limit.''; $result_news = mysql_query($query_news); #--------------------------------------------------------#

Dla owych zapytań mam dwie pętle while. Jest to skrypt wyszukiwarki. Nie wiem tylko jak zrobić stronicowanie dla tych wyników...

To co chciałbym: załóżmy, jest limit 11 wyników na stronę. Znaleziono stron 56, 32 artykułów i 24 newsów. No i najpierw są 2 strony z 11 artykułami i jedna z 10 i jednym newsem, kolejna z 11 newsami, kolejna z 11 i ostatnia z 1.

To co mi wychodzi: na każdej stronie limit jest podwajany (bo dwa zapytania) czyli mam na stronie 22 wyniki, 11 artykułów i 11 newsów. Jak się skończą newsy to jest p o11 artykułów, w wyniku czego jest bałagan - wyniki nie są posortowane i ich ilość na stronie zdarza się być nierówna.

Ktoś pomoże? :D



połącz obie tabelki + dodaj kolumne "typ" niech przyjmuje ona warości "A" dka artykułu oraz "N" dla newsa

Ale mam rozbudowany skrypt i będzie to niewygodne.

Pomysł Bełdzia jest dobry ze względu na szybkość,mniejsze obciążenie itd. :) Ale IMO po co wyświetlać na jednej stronie aktualności i arty? Nie można na dwóch?
Ilość nierówna . . . :) Logiczne, skoro artów jest więcej. A sortować możesz ORDER BY data dla przykładu . . .



andrzeju, nie zrozumiales problemu. Dwa zapytania, dwie pętle i wychodzi sajgon. Masz stron 5 z limitem 11 i na dwóch 1 masz np. po 22 strony, pote masz np. 18 i na koniec dwie po 11.


Ale IMO po co wyświetlać na jednej stronie aktualności i arty? Nie można na dwóch?
np na potrzeby wyszukiwarki


Ale mam rozbudowany skrypt i będzie to niewygodne.
dlaczego?

Ach,już rozumiem :) Policz liczbę znalezionych i dopełnij do liczby szukanych w drugiej pętli. To chyba jedyne korzystne rozwiązanie . . . pomijając pomysł Bełdzia.

Bełdzio, a jak dorobię np. dział download? XD i będę chciał żeby tam szukało? To mam złączyć 3 tabelki? XD Andrzeju, jak mam to dopełnić? Co masz dokładniej na myśli?
Użytkownik Isaac from Vale edytował ten post 11 sierpień 2007, 14:58
Hoho! Ja też bym miał niedługo podobny problem,ale widzę,że sam się rozwiąże :P
Wracając do tematu. Pobierasz liczbę wyników pierwszej pętli i jeżeli jest mniejsza od 11 to w drugim zapytaniu zwiększasz ilość do 22 - ilość z pierwszego zapytania. Mam nadzieję,że o to chodzi oraz że uda się. Należy wziąć również pod uwagę to,że w drugim zapytaniu wyników będzie mniej niż 11. Ale na razie nie mam pomysłu,jak to rozwiązać . . .

Mam pomysł na rozwiązanie ale nie wiem jak zastosować LEFT JOIN do tego zapytania:
$query = 'SELECT * FROM `'.prefix.'articles` WHERE `title` LIKE "%'.$word.'%" OR `text` LIKE "%'.$word.'%" LIMIT '.$start.', '.$limit.'';
aby pobrało na tej zasadzie z tabel prefix.articles i prefix.news rekordy w których tytułach ALBO tekstach znajduje się wartość przypisana zmiennej $word.


Bełdzio, a jak dorobię np. dział download? XD i będę chciał żeby tam szukało? To mam złączyć 3 tabelki? XD Andrzeju, jak mam to dopełnić? Co masz dokładniej na myśli?

pewnie, że tak, wystarczy tylko odpowiednio zaprojektować bazę

Czy da sie te zapytania:
#------------ zapytanie dla tabeli artykułów ------------# $query = 'SELECT * FROM `'.prefix.'articles` WHERE `title` LIKE "%'.$word.'%" OR `text` LIKE "%'.$word.'%" LIMIT '.$start.', '.$limit.''; $result = mysql_query($query); #------------ zapytanie dla tabeli newsów ---------------# $query_news = 'SELECT * FROM `'.prefix.'news` WHERE `title` LIKE "%'.$word.'%" OR `text` LIKE "%'.$word.'%" LIMIT '.$start.', '.$limit.''; $result_news = mysql_query($query_news); #--------------------------------------------------------#
Połączyć w jedno??

Tak,wystarczy wyciągać dane z dwóch tabel w jednym zapytaniu. To chyba podstawy relacji w bazie danych . . .


Czy da sie te zapytania:
#------------ zapytanie dla tabeli artykułów ------------# $query = 'SELECT * FROM `'.prefix.'articles` WHERE `title` LIKE "%'.$word.'%" OR `text` LIKE "%'.$word.'%" LIMIT '.$start.', '.$limit.''; $result = mysql_query($query); #------------ zapytanie dla tabeli newsów ---------------# $query_news = 'SELECT * FROM `'.prefix.'news` WHERE `title` LIKE "%'.$word.'%" OR `text` LIKE "%'.$word.'%" LIMIT '.$start.', '.$limit.''; $result_news = mysql_query($query_news); #--------------------------------------------------------#
Połączyć w jedno??

UNION SELECT

Próbowałem, nie działa. A nie działa, bo w tabeli newsów jest 5 pól a w artykułach 6... jak usunąłem jedno pole z artykułów to zadziałało..
Użytkownik Isaac from Vale edytował ten post 11 sierpień 2007, 21:51
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.