Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ułożenie rekordów z bazy w dwoch kolumnach
Forum PHP.pl > Forum > PHP
Ocsiek
Witam, na swojej stronie umieściłem dwa zapytania sql, ktore w rezultacie daja mi tytul posta, zawartosc posta oraz autora. Za pomoca php + sql wyciagam wszystkie dane z bazy ktorze dotyczą postów ale to wszystko pokazuje mi sie w jednym ciagu od gory do dolu. A ja chciałbym z tego zrobic dwie kolumny w ktorych pokazywalo by sie to co wyciagnalem z bazy ale nie powtarzalo. Potrafie zrobic z tego co mam teraz jedna wielka kolumne na pol strony ale nie wiem jak juz czesc tych danych, ktore wyciagnalem za pomoca sql dac do kolumny obok.

Wszystko robie na wordpressie.

Jakieś sugestie ? da sie to za pomoca php zrobic ?
NickOver
Jeśli dobrze rozumiem to wszystkie informacje dajesz do jednj zmiennej. Jeśli chcesz to rozdzielić to możesz to zrobić na 2 sposoby.
1. Rozdzielić zapytanie na 3. Do np. zmiennej $autor dajesz SELECT autor FROM... Do innej pobierasz treść a do jeszcze innej tytuł a następnie tam gdzie mają się pojawić dajesz echo $NAZWA_ZMIENNEJ;

2.Wszystko pobierasz do tablicy
  1. $NAZWA_ZMIENNEJ = array();
  2. $NAZWA_ZMIENNEJ[] = SELECT * FROM...

A potemm tylko wyciągasz z tablicy wartości które Cię interesują używając
  1. $NAZWA_TABLICY[autor]


Możesz jeszcze cały tekst porozdzielać (nie pamiętam jak ta funkcja się nazywa) ale jest to niewydajne.
Pozdrawiam
NickOver
Ocsiek
Tzn to mam wlasnie zrobione wszystko tak jak mowisz. Spróbuje wytlumaczyc jeszcze raz. Moje posty sa pobrane wg. tego jak ty napisales. Wygladaja normalnie jak na kazdej stronie gdzie sa jakies wiadomosci - jeden pod drugim przykladu za bardzo nie bede podawal na podstawie jakiejs strony by nie bylo problemow przez to ) No ale chce dojść do takiego wyniku jak jest na php.pl

Przykład to czego chce osiagnac

Czyli ma byc na stronie block w ktorym sa posty z danej kategorii, obok jest kolejny block z postami z innej kategorii i tak powiedzmy 3 raz jest block i znow z innymi postami ( to wszystko by bylo ukladane wg kategorii )
Wazniak96
@Ocsiek pokaż co już masz(kod) i narysuj np. w paincie co chcesz osiągnąć.

@NickOver yym? O czym ty piszesz?

Nom to sprawa jest prosta. Tworzysz jeden div. W nim umieszczasz 3 divy o określonym width i dla każdej kolumny dajesz osobny select z odpowiednim parametrem kategorii. Nom i wtedy pętla while, żeby dla każdego rekordu w bazie dla każdej kategorii tworzyło kolejny div dla danego posta w dany divie kategorii.
Ocsiek
a dałoby sie to zrobić na podstawie 2 selectow, ktore pobieraja wszystko z bazy co chce zamiast takiego selecta z odpowiednim parametrem kategorii ?

@Wazniak96 Nickover pisze to co mam zrobione akurat
Wazniak96
A na jakiej zasadzie chcesz to podzielić na kolumny ?
Ocsiek
właśnie tutaj tkwi problem ze nie mam pojecia za bardzo. Bo mam dwa selecty jeden ktory pobiera ogolne info a drugi select ktory pobiera dokladniejsze i przy okazji korzysta z tego 1 zapytania(selecta). I mam to w petli while, foreach,if
Wazniak96
Skoro nie masz pojęcia co chcesz zrobić i pokazać co już masz to jak mamy Ci pomóc? closedeyes.gif
Chodzi mi co chcesz aby w tych kolumnach się znajdywało? nie wiemm... w pierwszej kolumnie 10 postów, w drugiej kolejne 10 postów itp ?
Ocsiek
A to źle ciebie zrozumialem. Ja mam pojecie co chce zrobić ale nie wiem w jaki sposob to można. Tak chce by w jednej kolumnie pojawiło sie 10(najnowszych) postow z kategorii np Informatyka a w drugiej kolumnie 10 postow(najnowszych) z kategorii Biologia.

Wystarczy php czy sql tez ? bo widze ze troche to zajmuje miejsca

KOD:




  1. $list = mysql_query("SELECT TER.term_id ID, TER.name NAME, SUM(1) POST_COUNT
  2. FROM wp_terms TER, wp_term_taxonomy TAX, wp_term_relationships REL, wp_posts POS
  3. WHERE TER.term_id = TAX.term_id
  4. AND REL.term_taxonomy_id = TAX.term_taxonomy_id
  5. AND POS.ID = REL.object_id
  6. GROUP BY TER.term_id desc, TER.name");
  7.  
  8. $listpost = mysql_query("SELECT TER.term_id ID, POS.post_title POST_TITLE, POS.post_content POST_CONTENT, USR.display_name POST_AUTHOR, POS.post_date POST_DATE
  9. FROM wp_terms TER, wp_term_taxonomy TAX, wp_term_relationships REL, wp_posts POS, wp_users USR
  10. WHERE TER.term_id = TAX.term_id
  11. AND REL.term_taxonomy_id = TAX.term_taxonomy_id
  12. AND POS.ID = REL.object_id
  13. AND USR.ID = POS.post_author
  14. GROUP BY TER.term_id asc, POS.post_date desc, POS.post_title, POS.post_content, USR.display_name ");
  15.  
  16. $postrows = array();
  17. while($postrow = mysql_fetch_array($listpost))
  18. {
  19. $postrows[] = $postrow;
  20. }
  21.  
  22. while($catrow = mysql_fetch_array($list))
  23. {
  24. $id = stripslashes($catrow['ID']);
  25. $name = stripslashes($catrow['NAME']);
  26. $post_count = stripslashes($catrow['POST_COUNT']);
  27.  
  28.  
  29. echo "<div class='cat'> <div class='name'>$name</div></div>";
  30.  
  31. echo "<br/>";
  32.  
  33. foreach($postrows as $postrow)
  34. {
  35. if ($id == stripslashes($postrow['ID']))
  36. {
  37.  
  38.  
  39. $post_title = stripslashes($postrow['POST_TITLE']);
  40. $post_content = stripslashes($postrow['POST_CONTENT']);
  41. $post_author = stripslashes($postrow['POST_AUTHOR']);
  42. $post_date = stripslashes($postrow['POST_DATE']);
  43.  
  44.  
  45. echo "<b>" .$post_title."</b><br/>";
  46.  
  47. echo $post_content ;
  48. echo "<br/>";
  49. echo "Uzytkownik:<b>". $post_author . "</b>\n";
  50.  
  51. echo "Data:<b>" . $post_date . "</b>\r\n";
  52. echo "<br/><hr/>";
  53. }
  54. }
  55. }
Wazniak96
Nie wiem czy zadziała. napisane z palca. wink.gif
  1. $list = mysql_query("SELECT TER.term_id ID, TER.name NAME, SUM(1) POST_COUNT
  2. FROM wp_terms TER, wp_term_taxonomy TAX, wp_term_relationships REL, wp_posts POS
  3. WHERE TER.term_id = TAX.term_id
  4. AND REL.term_taxonomy_id = TAX.term_taxonomy_id
  5. AND POS.ID = REL.object_id
  6. GROUP BY TER.term_id desc, TER.name");
  7.  
  8. $listpost = mysql_query("SELECT TER.term_id ID, POS.post_title POST_TITLE, POS.post_content POST_CONTENT, USR.display_name POST_AUTHOR, POS.post_date POST_DATE
  9. FROM wp_terms TER, wp_term_taxonomy TAX, wp_term_relationships REL, wp_posts POS, wp_users USR
  10. WHERE TER.term_id = TAX.term_id
  11. AND REL.term_taxonomy_id = TAX.term_taxonomy_id
  12. AND POS.ID = REL.object_id
  13. AND USR.ID = POS.post_author
  14. GROUP BY TER.term_id asc, POS.post_date desc, POS.post_title, POS.post_content, USR.display_name ");
  15.  
  16. $postrows = array();
  17. while($postrow = mysql_fetch_array($listpost))
  18. {
  19. $postrows[] = $postrow;
  20. }
  21.  
  22. echo "<div class='wrapper'>"; //div odpowiadający całemu głównemu kontemerowi
  23. $i = 1; $col = 1;
  24.  
  25. while($catrow = mysql_fetch_array($list))
  26. {
  27. $id = stripslashes($catrow['ID']);
  28. $name = stripslashes($catrow['NAME']);
  29. $post_count = stripslashes($catrow['POST_COUNT']);
  30.  
  31.  
  32. echo "<div class='cat_".$col."'> <div class='name'>$name</div></div>";
  33.  
  34. echo "<br/>";
  35.  
  36. foreach($postrows as $postrow)
  37. {
  38. if ($id == stripslashes($postrow['ID']))
  39. {
  40.  
  41. echo"<div id='post'>"; //Div dla posta
  42. $post_title = stripslashes($postrow['POST_TITLE']);
  43. $post_content = stripslashes($postrow['POST_CONTENT']);
  44. $post_author = stripslashes($postrow['POST_AUTHOR']);
  45. $post_date = stripslashes($postrow['POST_DATE']);
  46.  
  47.  
  48. echo "<b>" .$post_title."</b><br/>";
  49.  
  50. echo $post_content ;
  51. echo "<br/>";
  52. echo "Uzytkownik:<b>". $post_author . "</b>\n";
  53.  
  54. echo "Data:<b>" . $post_date . "</b>\r\n";
  55. echo "<br/><hr/></div>";
  56. if($i > ($col*10)) $col++;
  57. $i++;
  58. }
  59. }
  60. }
  61. echo "</div>";


Przy tym rozwiązaniu musisz ostatecznie ustawić ile chcesz kolumn i określić ich szerokość w css. Do tego musisz też dopisać że gdy miejsce się skończy to ma się złamać pętla smile.gif
Ocsiek
$i = 1; $col = 1; czyli tutaj w $col mam ustawic ile chce miec kolumn i pozniej w css ustawić szerokość dla wrapper?
Wazniak96
nie. tutaj ustawiasz licznik, żeby jechał od 1 w górę. Poniżej masz:
  1. echo "<div class='cat_".$col."'>

Jeśli chcesz żeby skończyło się na powiedzmy 3 kolumnach to na samym, pod $i++; kod:
  1. if($col >= 3) break;
i musisz tak na końcu każdej pętli. i w css dla każdego cat_1, cat_2 itp ustawiasz szerokość.
Ocsiek
Nie dziala ;(. Skopiowalem to co dałeś i w css wpisalem:



.cat_1{

width:300px;


}


.cat_2{

width:300px;


}

.cat_3{

width:300px;


}
Wazniak96
nie działa to znaczy? co pokazuje ?
Pogrzeb trochę w kodzie. mówiłem że napisałem go tak o smile.gif
Ocsiek
tzn działać działa ale nie robi mi kolumn. Czyli moze to tutaj byc problemem to ze nie zrobilem tego: "Do tego musisz też dopisać że gdy miejsce się skończy to ma się złamać pętla"? Bo w sumie tak kombinuje ciagle ale o tym zapomnialem
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.