Paginacja do wyszukiwarki strony |
Paginacja do wyszukiwarki strony |
17.05.2019, 18:11:47
Post
#21
|
|
Grupa: Zarejestrowani Postów: 515 Pomógł: 63 Dołączył: 27.08.2012 Ostrzeżenie: (0%) |
Cytat Coś w tym stylu ? $sql = "SELECT marka, pistolet, count(*) as c FROM $TableContent WHERE marka LIKE '%$search%' OR pistolet LIKE '%$search%'"; dla paginacji pobierasz tylko liczbę
a dla strony pobierasz tylko tyle ile potrzebujesz
co do zliczenia ilości rekordów: autor powinien wiedzieć, że jeśli nie planuje mieć dużej bazy to to wystarczy i będzie hulało. Przy dużych bazach trzeba byłoby to lepiej przemyśleć, zoptymalizować, testować. Zliczanie po frazach, pewnie jeszcze na silniku innodb, odbije się długimi czasami. Ten post edytował gitbejbe 17.05.2019, 18:12:05 |
|
|
17.05.2019, 19:48:55
Post
#22
|
|
Grupa: Zarejestrowani Postów: 594 Pomógł: 66 Dołączył: 22.02.2008 Skąd: Dublin Ostrzeżenie: (0%) |
Ok. Musze poczytac o tym jak zoptymalizowac wyniki w duzych zapytaniach.
Generalnie zdaje sobie sprawe ze mozna albo zajechac baze albo zapchac pamiec ładujac np zawartosc pliku ktory ma np 'nascie' mega do pamieci. Jakos o tym nie pomyslalem zreszta wczesniej nie robilem nic w ten sposob czyli z uzyciem count -------------------- |
|
|
20.05.2019, 12:02:33
Post
#23
|
|
Grupa: Zarejestrowani Postów: 37 Pomógł: 0 Dołączył: 17.05.2019 Ostrzeżenie: (0%) |
Wrzuci ktos w końcu normalny skrypt ? Bo z tego co widzę to troszkę tu namieszane.
Ok. Musze poczytac o tym jak zoptymalizowac wyniki w duzych zapytaniach. Generalnie zdaje sobie sprawe ze mozna albo zajechac baze albo zapchac pamiec ładujac np zawartosc pliku ktory ma np 'nascie' mega do pamieci. Jakos o tym nie pomyslalem zreszta wczesniej nie robilem nic w ten sposob czyli z uzyciem count Wrzucisz poprawione ? |
|
|
20.05.2019, 12:21:11
Post
#24
|
|
Grupa: Zarejestrowani Postów: 965 Pomógł: 285 Dołączył: 19.06.2015 Skąd: Warszawa Ostrzeżenie: (0%) |
A może Ty troche wysilisz szare komórki i spróbujesz sam coś zrobić ze wszystkich wskazówek, które dostałeś? Chętnie pomożemy, jeśli utkniesz w jakimś momencie.
|
|
|
20.05.2019, 12:36:26
Post
#25
|
|
Grupa: Zarejestrowani Postów: 37 Pomógł: 0 Dołączył: 17.05.2019 Ostrzeżenie: (0%) |
|
|
|
20.05.2019, 12:50:32
Post
#26
|
|
Grupa: Zarejestrowani Postów: 965 Pomógł: 285 Dołączył: 19.06.2015 Skąd: Warszawa Ostrzeżenie: (0%) |
No dobrze, to zacznij od czegoś, jak nie będziesz mógł ruszyć dalej, to wrzuć swój kod tutaj i Cię nakierujemy.
|
|
|
20.05.2019, 12:51:43
Post
#27
|
|
Grupa: Zarejestrowani Postów: 37 Pomógł: 0 Dołączył: 17.05.2019 Ostrzeżenie: (0%) |
A może Ty troche wysilisz szare komórki i spróbujesz sam coś zrobić ze wszystkich wskazówek, które dostałeś? Chętnie pomożemy, jeśli utkniesz w jakimś momencie. Dobra. Udało mi się pare rzeczy połączyć ale jest problem bo search engine nie łapie z paginacją. <?php $output = NULL; if(isset($_POST['submit'])) { //connect to the databse $mysqli = NEW MySQLi ("localhost", "user", "password", "user"); $search = $mysqli->real_escape_String($_POST['search']); //Query the database $resultSet = $mysqli ->query("SELECT * FROM pistolety WHERE marka LIKE '%$search%' OR pistolet LIKE '%$search%'"); if($resultSet ->num_rows > 0) { while($rows = $resultSet ->fetch_assoc() ) { $pistolet= $rows['pistolet']; $marka = $rows['marka']; $output .= "Pistolet: $pistolet<br />Marka: $marka<br /><br />"; } }else{ $output = "No results"; } } ?> <form method="POST"> <input type="TEXT" name="search" /> <input type="SUBMIT" name="submit" value="Search" /> </form> <?php echo $output; ?> <?php function ReturnRows($ServerName, $UserName, $UserPassword, $DbName, $TableContent, $search) { $Connection = mysqli_connect($ServerName, $UserName, $UserPassword); if(!$Connection) { die ('Nie można się pol±czyć z MySQL : ' . mysqli_connect_error()); } $SelectDB = mysqli_select_db($Connection, $DbName); if(!$SelectDB) { print 'Nie mozna polaczyc sie z baza danych ' . mysqli_connect_error(); } $sql = "SELECT COUNT(*) FROM $TableContent WHERE marka LIKE '%$search%' OR pistolet LIKE '%$search%'"; $result = mysqli_query($Connection,$sql); if (mysqli_num_rows($result) > 0) { while($row = mysqli_fetch_assoc($result)) { $TabID[] = $row['marka']; $TabName[] = $row['pistolet']; } } mysqli_close($Connection); $url = $_SERVER['SCRIPT_NAME']; $wyswietlaj=4; $ile_linkow=3; if(isset($TabID) && isset($TabName)) { array_multisort($TabID, SORT_ASC, $TabName); } else{ print 'Brak wynikow<br>'; } if(empty($_GET['czytaj'])) { $czytaj=0; } else{ $czytaj=$_GET['czytaj']; } if(empty($_GET['dalej'])) { $dalej=1; } else{ $dalej=$_GET['dalej']; } if(isset($_GET['czytaj'])) { $nr=$_GET['czytaj']; } if(empty($_GET['czytaj'])){ $nr=0; } $u=1; for($i=$czytaj;$i<$czytaj+$wyswietlaj;$i++) { if(!empty($TabID[$i])) { print 'Marka: '.$TabID[$i].'<br>'; print 'Pistolet: '.$TabName[$i].'<p>'; } } $out=""; for($i=$dalej;$i<$dalej+$ile_linkow;$i++) { $k=($i-1)*$wyswietlaj; if($k<count(@$TabID)) { if($k==$czytaj) { $out.=" [$i] "; } else{ $out.=" <a href=\"$url?&czytaj=$k&dalej=$dalej\">[$i]</a> "; } } } if($dalej>1) { $cz=($dalej-1)*$wyswietlaj-$wyswietlaj; $dal=$dalej-$ile_linkow; print " <a href=\"$url?czytaj=$cz&dalej=$dal\"><<<</a>"; } else{ print " <<< "; } print $out; if($k+$wyswietlaj<count(@$TabID)) { $cz=$k+$wyswietlaj; $dal=$dalej+$ile_linkow; print " <a href=\"$url?czytaj=$cz&dalej=$dal\">>>></a> "; } else{ print " >>>"; } } ReturnRows('localhost', 'user', 'password', 'user', 'pistolety', 'marka'); // 'server', 'user', 'pass', 'nazwa bazy', 'nazwa tabeli', 'szukana fraza') ?> |
|
|
20.05.2019, 13:30:51
Post
#28
|
|
Grupa: Zarejestrowani Postów: 965 Pomógł: 285 Dołączył: 19.06.2015 Skąd: Warszawa Ostrzeżenie: (0%) |
1. Wykonaj zapytanie z count - pobierz całkowitą ilość rekordów.
2. Pobierz informację na której stronie jesteś i przypisz sobie do zmiennej 3. Wykonaj zapytanie pobierające rekordy - bez count, z użyciem LIMIT -> Google: MySQL Limit. Twój limit to ilość rekordów, które chcesz widzieć na stronie, Offset to (numer strony - ze zmiennej - 1) * ilość na stronę. 4. Wyświetl rekordy 5. Wyświetl paginację. Utwórz sobie jedno połączenie do bazy - na początku skryptu i jego używaj. |
|
|
21.05.2019, 11:09:12
Post
#29
|
|
Grupa: Zarejestrowani Postów: 37 Pomógł: 0 Dołączył: 17.05.2019 Ostrzeżenie: (0%) |
1. Wykonaj zapytanie z count - pobierz całkowitą ilość rekordów. 2. Pobierz informację na której stronie jesteś i przypisz sobie do zmiennej 3. Wykonaj zapytanie pobierające rekordy - bez count, z użyciem LIMIT -> Google: MySQL Limit. Twój limit to ilość rekordów, które chcesz widzieć na stronie, Offset to (numer strony - ze zmiennej - 1) * ilość na stronę. 4. Wyświetl rekordy 5. Wyświetl paginację. Utwórz sobie jedno połączenie do bazy - na początku skryptu i jego używaj. Po tutaj piszę i proszę o pomoc. Gdbym był taki mądry jak Twoje wyżej przedstawione punkty to bym na forum nie zaglądał. |
|
|
21.05.2019, 11:13:44
Post
#30
|
|
Grupa: Zarejestrowani Postów: 965 Pomógł: 285 Dołączył: 19.06.2015 Skąd: Warszawa Ostrzeżenie: (0%) |
No ale chłopie, Ty nawet nie próbujesz zrobić tego co Ci piszę, tylko czekasz aż ktoś to zrobi za Ciebie. Nie uważasz, że to trochę nie fair?
|
|
|
21.05.2019, 11:21:18
Post
#31
|
|
Grupa: Zarejestrowani Postów: 37 Pomógł: 0 Dołączył: 17.05.2019 Ostrzeżenie: (0%) |
|
|
|
21.05.2019, 22:23:23
Post
#32
|
|
Grupa: Zarejestrowani Postów: 129 Pomógł: 13 Dołączył: 29.03.2012 Ostrzeżenie: (0%) |
To może ja postaram się pomóc:
Ad.1 https://dev.mysql.com/doc/refman/8.0/en/counting-rows.html - pierwszy opis Ad.2 https://stackoverflow.com/questions/9725323...#answer-9725410 AD.3 https://www.w3schools.com/php/php_mysql_select_limit.asp(ryzyko SQL Injection) - tutaj pod limit i offset podstawiasz dane z $_GET z tym, że musisz wykorzystać mnożenie dla pobierania kolejnych rekordów czyli: do zapytania pobierającego dane możesz dokleić: "....LiMIT = ".(((int)$_GET['page'] > 0)? ($_GET['page']*20) : 0). " OFFSET = 20"; Ad. 4 https://www.php.net/manual/en/pdostatement....hall.php#116347 - podstawiasz zapytanie z Ad.3 Ad. 5: Tutaj możesz sobie na poczatku ustawić ręcznie kilka linków powiedzmy : <a href="strona.php?page=0" /> <a href="strona.php?page=1" /> <a href="strona.php?page=2" /> Ad.6 https://www.php.net/manual/en/pdo.connections.php Ten post edytował emillo91 21.05.2019, 22:36:27 |
|
|
Wersja Lo-Fi | Aktualny czas: 24.04.2024 - 12:10 |