Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Wyświetlanie rekordów z mysql (po przecinkach)
Forum PHP.pl > Forum > Przedszkole
Emrys
Witam to znów ja.
Robię sobie taki skrypt typu kwejk itd podpięty pod użytkowników z mybb. I teraz tak. Chcę zrobić listę ulubionych postów, ale też nie chce zaśmiecać sobie bazy... Jakiś gość kiedyś pokazywał mi rozwiązanie w bazie, że mam przykładowo:

Komórkę: id
Z rekordem: 12 - id użytkownika
Komórkę: posts
Z rekordem: 21, 32, 53, 64 - id postów po przecinkach tak jak tu

Z dodawaniem sobie myślę poradzę, gorzej z odczytywaniem tego przez php. Gdy mam wszystko w osobnych rekordach łatwo, za pomocą pętli, to sobie wyświetlę. A jak mam to zrobić w takim przypadku?

Proszę o szybką pomoc biggrin.gif
trueblue
Temat: Przechowywanie atrybutow w bazie
goartur
PHP funkcja explode
Emrys
No dobra ale jeżeli każdy użytkownik (przypuśćmy jest ich 100) doda sobie do ulubionych 15 postów to jest 1500 rekordów - duzo, nie? ;D Dlatego nie chce sobie tak zaśmiecać bazy.

Tam gościu nie zabardzo wytłumaczył jak miałbym wyświetlić wszystkie posty z tymi ID.. Czy mógłby mi ktoś bardziej to wytłumaczyć? D:
viking
Dużo to jest 150 milionów. Dla bazy to normalna praca.
goartur
Funkcja explore bierze sobie powiedzmy zmienna w tym przypadku naprzyklad $posty = 1,2,3,4,5
I konwertuje ja do tablicy array.
Następnie używasz for loop aby przejść przez wszystkie wyniki z tablicy

Powinno go wyglądać tak
$przekonwertowane = explode(',',$rowZBazy)
foreach($przekonwertowane as $userPost){
I tutaj używasz userPost żeby pobrać post z bazy danych o tym id
}
Emrys
Zrobiłem to na tej zasadzie jak wytłumaczyłeś goarthur:
  1. $id = $mybb->user['uid'];
  2. $r = mysql_fetch_array(mysql_query("Select * from posts where id = '{$id}'"));
  3. $fav = explode(",", $r['posts']);
  4.  
  5. foreach($fav as $post){
  6. $query = mysql_query("SELECT * FROM posts WHERE id = '{$post}' ORDER BY date desc");
  7. $row=mysql_fetch_array($query);
  8.  
  9. echo '<div class="center" align="center">';
  10. echo '<img src="'.$row['link'].'" />';
  11. echo '</div>';
  12. }


Jednak nie wyświetla mi nic. Spróbowałem dać w środku pętlę, ale też to nie wyszło. Może jesteś w stanie jeszcze jakoś mi pomóc..?
goartur
Hm nie widzę tutaj błędów, co zwraca ci var_dump($fav) oraz var_dump($row) w środku loopa? Dlaczego używasz 2 razy select z bazy posts?
Emrys
Już wiem dlaczego nie wyświetlało..
  1. $id = $mybb->user['uid'];
  2. $r = mysql_fetch_array(mysql_query("Select * from posts where id = '{$id}'"));
  3. $fav = explode(",", $r['posts']);
  4.  
  5. foreach($fav as $post){
  6. $query = mysql_query("SELECT * FROM posts WHERE id = '{$post}' ORDER BY date desc");
  7. $row=mysql_fetch_array($query);
  8.  
  9. echo '<div class="center" align="center">';
  10. echo '<img src="'.$row['link'].'" />';
  11. echo '</div>';
  12. }


w tym zapytaniu

  1. $r = mysql_fetch_array(mysql_query("Select * from posts where id = '{$id}'"));

wpisałem złą tabelę, powinno być favorite, nie posts.

Dzięki za pomoc smile.gif

Edit//
Jednak mam jeszcze jedno pytanko.. Podczas dodawania postu do ulubionych, przydałoby się sprawdzić czy takowy post już nie jest tam dodany, jak mogę to wykonać..?
goartur
Chodzi ci o sprawdzanie czy w tym posts nie ma danego id? Jeśli tak to pobierasz najpierw te wszystkie id z tej tabeli a później używasz funkcji in_array aby sprawdzić czy takie id juz istnieje
Emrys
Tak myślałem, żeby tego użyć, ale nie wiem czy jak mam np. id 2,12,22, nie wyszuka mi tych 3 id gdy jako "igłę w stogu siana" wpiszę 2.. ;/

Chociaż spróbuję tak zrobić i jeszcze mam jeden swój pomysł. Odezwę się, jeżeli nie będzie mi to działać.. ;D
trueblue
Pomyśl jeszcze co będzie, kiedy użytkownik zdecyduje usunąć post z ulubionych.
Emrys
W usuwać to spróbuję pokombinować z
biggrin.gif

Dobra.. Myślałem, że już sobie poradzę ale jednak nie.
  1. $r = mysql_fetch_array(mysql_query("Select * from favorite where id = '{$uid}'"));
  2. $post_tablic = $r['posts'];
  3. if(in_array("2", $post_tablic)) {
  4. echo 'Dodałeś do ulubionych';
  5. } else {
  6. echo '<span class="click">Dodaj do ulubionych</span>';
  7. }

Dostaje taki oto błąd: http://scr.hu/5c6f/ogmgy
To nie jest związane z mysql, bo nawet jak
  1. $r['posts']

zamieniłem na zwykłe liczby po przecinku, to i tak dostałem ten sam błąd. Pomocy ;/
viking
$post_tablic jest stringiem (co oczywiste biorąc pod uwagę że to jakaś wartość z zapytania bezpośrednio) a ma być tablicą. Do tego poczytaj o podzapytaniach. Twój sposób jak widzisz jest marny, do tego generuje ogromną ilość zapytań.
Emrys


Postanowiłem, że zrobię to jednak normalnie bez kombinowania. Dzięki wszystkim, którzy próbowali mi pomóc wink.gif
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.