Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]Blad w zapytaniu sql
eminiasty
post
Post #1





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

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


Witam, mam pewnien problem dotyczacy zwracania wynikow w paginacji, kod paginacji jest tu:(raczej samego przetwarzania)
  1. $result= mysqli_query($link,$query) or die(mysqli_error());
  2. $row = mysqli_fetch_array($result);
  3. extract($row);
  4.  
  5. $onpage = 10;
  6. $navnum = 7;
  7. $allpages = ceil($all_posts/$onpage);
  8.  
  9. if(!isset($_GET['page']) or $_GET['page'] > $allpages or !is_numeric($_GET['page']) or $_GET['page'] <= 0){
  10. $page = 1;
  11. }else{
  12. $page = $_GET['page'];
  13. }
  14. $limit = ($page - 1) * $onpage;



Zapytanie wyglada nastepujaco:
Problem polega na tym, iż dane sa zwracana na podstawie kategori a nie newsow. Czyli jak powinno byc
$onpage = 10; newsow na stronie to wyswietla ich np 2 jesli sa 2 po 5 kategori w jednym. Jak przerobic to zapytanie by wyswietlal po newsach, a nie po kategoriach?
Probowalem GROUP BY news_id lecz to nie w tym rzecz bo potem sa kategorie nie wyswietlane ..;/
  1. $query1 ="
  2. SELECT ".$prefix."news.*,".$prefix."users.*,".$prefix."news_categories.*,".$prefix."categories.*
  3. FROM ".$prefix."news
  4. JOIN ".$prefix."users
  5. ON ".$prefix."news.users_id = ".$prefix."users.users_id
  6. JOIN ".$prefix."news_categories
  7. ON ".$prefix."news.news_id = ".$prefix."news_categories.news_id
  8. JOIN ".$prefix."categories
  9. ON ".$prefix."categories.categories_id = ".$prefix."news_categories.categories_id
  10. ORDER BY news_date_add
  11.  
  12. LIMIT $limit, $onpage";


Zauwazylem ze glowny blad jest w

  1. JOIN ".$prefix."news_categories
  2. ON ".$prefix."news.news_id = ".$prefix."news_categories.news_id

bo przyrownuje jednego newsa (jedno id) do kilku kategori czyli tego samego id , tylko nie wiem jak to zmienic zeby bylo poprawnie..;/


Ten post edytował eminiasty 4.02.2016, 13:12:18
Go to the top of the page
+Quote Post
com
post
Post #2





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


".$prefix."news.*,".$prefix."users.*,".$prefix."news_categories.*,".$prefix."categories.* już Ci mówiłem zastąp to *, bo to niczego nie daje a tylko zaciemnia wydłuża niepotrzebnie kod, czemu masz potrójnego joina?

Ten post edytował com 4.02.2016, 13:14:58
Go to the top of the page
+Quote Post
eminiasty
post
Post #3





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

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


  1. już Ci mówiłem zastąp to *
tzn? przeciez jest *?

1 join - z tabeli users wyciaga loginy(zeby byl wyswietlany potem)
  1. JOIN ".$prefix."users
  2. ON ".$prefix."news.users_id = ".$prefix."users.users_id



2 join - potrzebny jest w sumie zeby zrobic 3 joina(chyba) , bo potrzebuje miec powiazanie z categoreis
  1. JOIN ".$prefix."news_categories
  2. ON ".$prefix."news.news_id = ".$prefix."news_categories.news_id

3 join - nazy kategori sa trzymane w tabeli categories wiec musze je jakos pobrac? id kategori do newsa jest przypisywane w news_categories wiec stad chyba to potrzebne
  1. JOIN ".$prefix."categories
  2. ON ".$prefix."categories.categories_id = ".$prefix."news_categories.categories_id
Go to the top of the page
+Quote Post
com
post
Post #4





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


tak ale cale to ".$prefix."news.*,".$prefix."users.*,".$prefix."news_categories.*,".$prefix."categories.*" wystarczyło by zapisać jako * i efekt jest ten sam, ok no to musisz jeszcze zgrupować te wyniki odpowiednio, poczytaj o group by (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
eminiasty
post
Post #5





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

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


pisalem ze probowalem je grupowac
np. tak
  1. GROUP BY ".$prefix."news_categories.news_id


lecz rodza sie dwa problemy
1. nie wyswietla wszystkich newsow
2. po zgrupowaniu nie wyswietla wszystkich kategori dla danego newsa
Go to the top of the page
+Quote Post
com
post
Post #6





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


zaraz zaraz, z tego co widzę wyświetla te kategorie do których należą newsy, wiec jak nalezą do 2 np to nie wyświetli ich 5 przecież
Go to the top of the page
+Quote Post
eminiasty
post
Post #7





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

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


Dokladnie, a powinno chyba je wyswietlac.
W sesnie ze jeden newst ma dwie kategorie to je wyswietla przy nim. nie osobno.
To wyglada tak:

bez grupowania
(IMG:http://iv.pl/images/55276996056448780391_thumb.jpg)

z grupowaniem
(IMG:http://iv.pl/images/12197208131381307762_thumb.jpg)

Chce zeby bylo jak na pierwszym tylko nie zliczalo po ilosci kategori na stronie tylko ilosci postow.

Ten post edytował eminiasty 4.02.2016, 13:47:57
Go to the top of the page
+Quote Post
com
post
Post #8





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


on niczego nie zlicza, bo dalej masz 10 rekordów tylko zgrupowanych wiec na stronie robi Ci się ich np 5. Policz sobie ile masz katergorii, bo tyle jest rekordów, czyli 10 (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
eminiasty
post
Post #9





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

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


Ja wiem jak wyglada problem, nie umeim go tylko rozwiazac bo grupowanie nie dziala chyba..

To co mowisz jest prawda.
Tylko nie chce zeby na pierwszej stronie bylo 5 a na drugiej juz 6 nesow, a na 3 juz 7 np.
Prosze o pomoc w rozwiazaniu tej sytuacji.
Go to the top of the page
+Quote Post
com
post
Post #10





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


no to musisz ograniczyć wyświetlanie w inny sposób, powiedzmy przyjac pesymistyczny przypadek czyli 10xkategoria, a podział na strony zrobić w samym php (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
eminiasty
post
Post #11





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

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


rzuca mi sie tylko slowo jak?
W ktorym miejscu takie ograniczegnia powinny byc umieszczone? to powinno byc zrobione w postaci ifa czy inaczej?

Cytat
no to musisz ograniczyć wyświetlanie w inny sposób, powiedzmy przyjac pesymistyczny przypadek czyli 10xkategoria

czy chodzi ci o to aby ilosc wyswietlanych posotw na stronie podniesc np do 100? co w przypadku postow z kiludziesieciowam kategoriami zmniejszy liczebnosc? przeciez to nie rozwiazuje problemu, pozatym kazda strona bedzie zawiaerac inna liczbe postow

to jest moje wyswietlanie:

  1. ....
  2. //wyswietlanie danych
  3. echo '<table class="table">
  4. <thead>
  5. <tr>';
  6. echo'<th>LOGIN </th>';
  7. echo'<th>TYTUL</th>
  8. <th>KATEGORIA</th>
  9. <th>DATA ADD</th>
  10. <th>DATA END</th>
  11. <th>WYŚ</th>
  12. </tr>
  13. </thead>
  14. <tbody>
  15. ';
  16. foreach ($newst as $id => $newsy){ //petla, która leci po newsach
  17. echo '<tr>
  18. <td>'.$newsy['users'].'</td>
  19. <td>'.$newsy['name'].'</td><td>';
  20. foreach ($newsy['categories'] as $cat){ //pętla, która leci po kategoriach w newsach
  21. echo"<span class='rama label' style='color:#".$cat['color']."; background-color:".$cat['bg'].";'>".$cat['name']."</span>";
  22. }
  23. echo '</td><td>'.$newsy['date_add'].'</td>
  24. </td><td>'.$newsy['date_end'].'</td>
  25. </td><td>'.$newsy['display'].'</td>
  26. ';
  27. echo'<td>
  28. <a href="mod.php?s=news&a=czytaj&id='.$id.'" data-original-title="Czytaj" data-toggle="tooltip" type="button" class="btn btn-xs btn-success"><i class="fa fa-fw fa fa-comment"></i></a>
  29. </td>';
  30. echo'<td>
  31. <a href="mod.php?s=news&a=edytuj&id='.$id.'" data-original-title="Edytuj" data-toggle="tooltip" type="button" class="btn btn-xs btn-primary"><i class="fa fa-fw fa fa-pencil-square-o"></i></a>
  32. </td>';
  33. echo'<td>
  34. <a href="mod.php?s=news&a=usun&id='.$id.'" id="js-news-usun" data-original-title="Usuń" data-toggle="tooltip" type="button" class="btn btn-xs btn-danger js-are-you-sure"><i class="fa fa-fw fa fa-trash"></i></a>
  35. </td>';
  36.  
  37. }
  38. echo '</tr>
  39. </tbody>
  40. </table>';
  41.  
  42. }


Ten post edytował eminiasty 4.02.2016, 15:14:56
Go to the top of the page
+Quote Post
com
post
Post #12





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


chodzi o to żeby pobrać x rekordów z bazy, a ograniczenie i podział na strony nie robić przez limit a poprzez ograniczenie w tablicy przy wyświetlaniu. Ale ze względu na to że rekordów może być sporo dlatego sugerowałem limit ilość kategorii razy ilość elementów, których niech jest 5 zamiast 10 np.
Go to the top of the page
+Quote Post
eminiasty
post
Post #13





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

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


ok ok
chodzi ci o wywalnie LIMIT $limit, $onpage
tylko ze o to opiera sie paginacja ktora wyswietla newsy na kolejnych stronach.
Go to the top of the page
+Quote Post
com
post
Post #14





Grupa: Zarejestrowani
Postów: 3 034
Pomógł: 366
Dołączył: 24.05.2012

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


tak, i te paginacje zrób w php nie poprzez bazę, limit daj ale np 5 rekordów x 5 kategorii (IMG:style_emoticons/default/wink.gif) dodasz warunek modulo i tam ograniczysz na strony (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
eminiasty
post
Post #15





Grupa: Zarejestrowani
Postów: 267
Pomógł: 0
Dołączył: 11.09.2015

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


fajnie niby rozumiem.. ale nie wiem jak zrobic paginacje bez uzycia LIMIT i jak ten LIMIT zaimplementowac w kod php, najsmieszniejsze jest to ze kiedy nie uzywalem JOINow to wszystko bylo ok.
Go to the top of the page
+Quote Post

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: 24.08.2025 - 10:45