Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V  < 1 2  
Reply to this topicStart new topic
> Paginacja do wyszukiwarki strony
gitbejbe
post 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ę

  1. $sql = "SELECT COUNT(*) FROM $TableContent WHERE marka LIKE '%$search%' OR pistolet LIKE '%$search%'";


a dla strony pobierasz tylko tyle ile potrzebujesz

  1. $sql = "SELECT * FROM $TableContent WHERE marka LIKE '%$search%' OR pistolet LIKE '%$search%' LIMIT $start , $length";



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
Go to the top of the page
+Quote Post
dublinka
post 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


--------------------
Go to the top of the page
+Quote Post
Zenobiusz
post 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.

Cytat(dublinka @ 17.05.2019, 20:48:55 ) *
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 ?
Go to the top of the page
+Quote Post
kapslokk
post 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.
Go to the top of the page
+Quote Post
Zenobiusz
post 20.05.2019, 12:36:26
Post #25





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 17.05.2019

Ostrzeżenie: (0%)
-----


Cytat(kapslokk @ 20.05.2019, 13:21:11 ) *
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.


Cięzka sprawa biggrin.gif Jestem początkujący.
Go to the top of the page
+Quote Post
kapslokk
post 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%)
-----


smile.gif No dobrze, to zacznij od czegoś, jak nie będziesz mógł ruszyć dalej, to wrzuć swój kod tutaj i Cię nakierujemy.
Go to the top of the page
+Quote Post
Zenobiusz
post 20.05.2019, 12:51:43
Post #27





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 17.05.2019

Ostrzeżenie: (0%)
-----


Cytat(kapslokk @ 20.05.2019, 13:21:11 ) *
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')

?>
Go to the top of the page
+Quote Post
kapslokk
post 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.
Go to the top of the page
+Quote Post
Zenobiusz
post 21.05.2019, 11:09:12
Post #29





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 17.05.2019

Ostrzeżenie: (0%)
-----


Cytat(kapslokk @ 20.05.2019, 14:30:51 ) *
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ł.
Go to the top of the page
+Quote Post
kapslokk
post 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?
Go to the top of the page
+Quote Post
Zenobiusz
post 21.05.2019, 11:21:18
Post #31





Grupa: Zarejestrowani
Postów: 37
Pomógł: 0
Dołączył: 17.05.2019

Ostrzeżenie: (0%)
-----


Cytat(kapslokk @ 21.05.2019, 12:13:44 ) *
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?


No może jest nie fair ale ja tego nie ogarnę. Dla mnie tego jest za dużo. Ostatnią rzecz podłączyłem.
Go to the top of the page
+Quote Post
emillo91
post 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
Go to the top of the page
+Quote Post

2 Stron V  < 1 2
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: 28.03.2024 - 17:13