Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> problem ze stronicowaniem
peklo
post
Post #1





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


mam taki mały problemik ze stronicowaniem wyników.
Jak wcisne szukaj to stronicuje mi ok. Pokazuje wszystkie rekordy i dzieli ładnie na strony np:
27 rekordów po 5 na stronie czyli pokazuje 1 strona z 6. Jeślii wezme wybiorę warunki wyszukiwania również jest wszystko ok.
Problem pojawia się jak wciisnę warunki wyszukiwania dla drugiej tabeli.
Przykład:
Zaznacze prawo jazdy 1 i 2 pokazuje mi ładnie 6 wyników, a stronicowanie 1 strona z 5
lub
zaznacze pj 1 pokazuje 8 rekordów , a stronicowanie 1 z 3 stron.
Zapytanie odpowiedzialne za stronicowanie-nie do końca działa ok

  1. $sql="SELECT count(*) as `ile` FROM ogloszenia o WHERE ". implode( ' AND ', $where ) ;
  2. if(!empty($formData['id_prawo_jazdy']))
  3. $sql="SELECT count(*) as `ile` FROM ogloszenia o LEFT OUTER JOIN pj p on o.id=p.id_ogloszenia WHERE ". implode( ' AND ', $where )."";
  4. $row = $stmt=$pdo->prepare($sql);
  5. $row = $stmt->execute( $bind );
  6. $row = $stmt->fetch();
  7. $recordsCount = $row['ile'];



i skrypt z zapytania które jest ok, a słuzy do wyswietlania wyników
  1. $sql="SELECT o.miasto,o.id_kraj,o.id_wojewodztwo,o.wyroznione,o.aktywne,o.id,o.za,o.cena,o.id
    _kategoria,o.data_dod,o.nazwa_ogloszenia,o.czas,
  2. z.id_ogloszenia,z.thumb,z.uploads,z.im,p.id_ogloszenia,p.id_prawo_jazdy FROM ogloszenia o LEFT OUTER JOIN zdjecia z on o.id=z.id_ogloszenia LEFT OUTER JOIN pj p on o.id=p.id_ogloszenia
  3. WHERE ". implode( ' AND ', $where);
  4. if(!empty($formData['id_prawo_jazdy']))
  5. $sql.=" and o.id not in (select o2.id from ogloszenia as o2,pj as p2 where o2.id=p2.id_ogloszenia AND p2.id_prawo_jazdy in(".implode(',',$idpj_all)."))
  6. group by o.id having count(o.id)=".count($where_idpj)." order by o.wyroznione DESC,o.id DESC limit ".$start.",".($end - $start + 1);
  7. else
  8. $sql.=" group by o.id order by o.wyroznione DESC,o.id DESC limit ".$start.",".($end - $start + 1);
  9. $stmt=$pdo->prepare($sql);
  10. $stmt->execute( $bind );
Go to the top of the page
+Quote Post
3 Stron V   1 2 3 >  
Start new topic
Odpowiedzi (1 - 19)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Problem z mysql nie ma wiekszego zwiazku. Przenosze.

Juz ci poza tym tlumaczylem kilkukrotnie, ze zapytanie do zliczania rekordow ma byc takie samo co zapytanie do wyswietlania rekordow, gdyz w przeciwnym wypadku bedą przeklamane dane.... ale jak zwykle w ogole mnie nie sluchasz...
Go to the top of the page
+Quote Post
peklo
post
Post #3





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


no to tak robiłem i klapa. kombinowałem na wszelkie sposoby i nic (IMG:style_emoticons/default/sad.gif)

Ten post edytował peklo 12.05.2014, 18:54:59
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




W kodzie co tu pokazales raczej nie widac bys tak wlasnie zrobil. Jak dla mnie zapytanie do zliczania jest rozne od zapytania do wyswietlania.
Go to the top of the page
+Quote Post
peklo
post
Post #5





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


tak bo to zapytanie działa mi najlepiej z posród tych które zkleiłem wcześniej (IMG:style_emoticons/default/smile.gif) . Nospor ja Cię zawsze słucham (IMG:style_emoticons/default/smile.gif)

jak wezmę to samo zapytanie co do wyświetlania wyników to wyświetla mi 1 wynik. Jak wykasuje grupowanie tj jeszcze gorzej niż w pierwszym zapytaniu na poczatku postu
Go to the top of the page
+Quote Post
trueblue
post
Post #6





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


  1. $sql="SELECT count(*) FROM ogloszenia o LEFT OUTER JOIN zdjecia z on o.id=z.id_ogloszenia LEFT OUTER JOIN pj p on o.id=p.id_ogloszenia
  2. WHERE ". implode( ' AND ', $where);
  3. if(!empty($formData['id_prawo_jazdy']))
  4. $sql.=" and o.id not in (select o2.id from ogloszenia as o2,pj as p2 where o2.id=p2.id_ogloszenia AND p2.id_prawo_jazdy in(".implode(',',$idpj_all)."))
  5. group by o.id having count(o.id)=".count($where_idpj);
  6. else
  7. $sql.=" group by o.id";
Go to the top of the page
+Quote Post
peklo
post
Post #7





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


tak już próbowałem wcześnie Trueblue i na stornie pokazuje tylko 1 wynik
jak usuwam group to znowu mam w ciul stron 1 z np 20

Ten post edytował peklo 12.05.2014, 19:55:08
Go to the top of the page
+Quote Post
trueblue
post
Post #8





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


A jak pobierasz z tego zapytania ilość wszystkich rekordów?
Go to the top of the page
+Quote Post
peklo
post
Post #9





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


jak pobieram wszystkie rekordy tj ok tym zapytaniem

  1. $sql="SELECT count(*) FROM ogloszenia o LEFT OUTER JOIN zdjecia z on o.id=z.id_ogloszenia LEFT OUTER JOIN pj p on o.id=p.id_ogloszenia WHERE ". implode( ' AND ', $where);


Jak wezme szukaj z zaznaczonymi opcjami w tabeli głownej to tez jest ok. Dopiero jak dołącze te prawo jazdy to sie krzaczy
Go to the top of the page
+Quote Post
trueblue
post
Post #10





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Chciałem abyś pokazał jakim kodem pobierasz z zapytania, które Ci podałem ilość wszystkich rekordów.
Go to the top of the page
+Quote Post
peklo
post
Post #11





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


  1. $idpj_all=array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
  2. if (!empty($formData['id_prawo_jazdy']))
  3. {
  4. $where_idpj=array();
  5. $i=0;
  6. foreach($formData['id_prawo_jazdy'] as $idpj){
  7. $where_idpj[]=':id_prawo_jazdy_'.$i;
  8. $bind[':id_prawo_jazdy_'.$i++]=$idpj;
  9. $idpj_all=array_diff($idpj_all,array($idpj));
  10. }
  11. $where[] = 'id_prawo_jazdy IN('.implode(',',$where_idpj).')';
  12. }


a i jeszcze
  1.  
  2. $bind = array(
  3. ':aktywne' => 1,
  4. ':id_kategoria' => 1,
  5. );
  6.  
  7. $where = array(
  8. 'aktywne = :aktywne',
  9. 'id_kategoria = :id_kategoria'
  10. );


Ten post edytował peklo 12.05.2014, 20:07:09
Go to the top of the page
+Quote Post
trueblue
post
Post #12





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


A jak z zapytania, które Ci podałem pobierasz wartość?
Zapytanie to zwraca jeden rekord z jednym polem, i jest to liczba wszystkich rekordów, które spełniają podane warunki.

Obecnie pokazujesz mi jak budujesz warunki do tego zapytania.
Pokaż co robisz gdy je uruchomisz.
Go to the top of the page
+Quote Post
peklo
post
Post #13





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


tj pager autorstwa nospor, a wygląda mniej więcej tak

  1. $row = $stmt=$pdo->prepare($sql);
  2. $row = $stmt->execute( $bind );
  3. $row = $stmt->fetch();
  4. $recordsCount = $row['ile'];
  5. try{
  6. $pager = new Pager('idPagera', null);
  7. $pager->SetTotalRecords($recordsCount);
  8. $pager->Make(true);
  9. $pag = $pager->Render();
  10. $start = $pager->GetIndexRecordStart();
  11. $end = $pager->GetIndexRecordEnd();
  12. }
  13. catch (Exception $e) {
  14. echo $e->getMessage();
  15. }


kodu pagera raczej nie bede wklejać http://nospor.pl/download/idfolder/20/

i wyświetlenie ilosci stron
  1. echo 'Strona '.$pager->GetActualPage().' z '.$pager->GetTotalPages();
  2. echo $pag;


Ten post edytował peklo 12.05.2014, 20:20:08
Go to the top of the page
+Quote Post
trueblue
post
Post #14





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Spróbuj tak:
  1. $stmt=$pdo->prepare($sql);
  2. $stmt->execute( $bind );
  3. $recordsCount =$stmt->fetchColumn(0);
  4. echo "wszytkich rekordow=".$recordsCount; //pokaz wynik tego
  5. try{
Go to the top of the page
+Quote Post
peklo
post
Post #15





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


wszytkich rekordow=18
Go to the top of the page
+Quote Post
trueblue
post
Post #16





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


I z takim kodem (już bez tego echo) nie działa stronicowanie?
Go to the top of the page
+Quote Post
peklo
post
Post #17





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


działa stronicowanie ale tylko dla warunkóww wyszukiwania z tabeli głownej. Jak zaznacze przykladowo 1 checkbox pj to pokazuje tylko 1 rekord
Go to the top of the page
+Quote Post
trueblue
post
Post #18





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


A co pokazuje powyższe echo kiedy zaznaczysz ten jeden checkbox?
Go to the top of the page
+Quote Post
peklo
post
Post #19





Grupa: Zarejestrowani
Postów: 420
Pomógł: 0
Dołączył: 27.07.2011

Ostrzeżenie: (10%)
X----


wszytkich rekordow=1
Go to the top of the page
+Quote Post
nospor
post
Post #20





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Pozwole sobie się znowu wtrącić:
Jesli dodajecie do zapytania GROUP BY to wowczas
select COUNT(*)
nie działa już tak samo jak bez GROUP BY (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

3 Stron V   1 2 3 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 14.09.2025 - 17:06