Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Wyświetlanie rekordów z mysql (po przecinkach)
Emrys
post 1.01.2016, 20:39:10
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 1.01.2016

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


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
Go to the top of the page
+Quote Post
trueblue
post 1.01.2016, 21:04:02
Post #2





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Temat: Przechowywanie atrybutow w bazie


--------------------
Go to the top of the page
+Quote Post
goartur
post 1.01.2016, 21:21:32
Post #3





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 19.10.2014

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


PHP funkcja explode
Go to the top of the page
+Quote Post
Emrys
post 1.01.2016, 21:23:11
Post #4





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 1.01.2016

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


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:
Go to the top of the page
+Quote Post
viking
post 1.01.2016, 21:28:53
Post #5





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Dużo to jest 150 milionów. Dla bazy to normalna praca.


--------------------
Go to the top of the page
+Quote Post
goartur
post 1.01.2016, 21:38:01
Post #6





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 19.10.2014

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


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
}
Go to the top of the page
+Quote Post
Emrys
post 1.01.2016, 22:20:45
Post #7





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 1.01.2016

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


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..?

Ten post edytował Emrys 1.01.2016, 22:21:18
Go to the top of the page
+Quote Post
goartur
post 1.01.2016, 22:31:16
Post #8





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 19.10.2014

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


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?

Ten post edytował goartur 1.01.2016, 22:33:21
Go to the top of the page
+Quote Post
Emrys
post 1.01.2016, 23:03:15
Post #9





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 1.01.2016

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


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ć..?

Ten post edytował Emrys 1.01.2016, 23:10:07
Go to the top of the page
+Quote Post
goartur
post 2.01.2016, 00:03:51
Post #10





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 19.10.2014

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


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
Go to the top of the page
+Quote Post
Emrys
post 2.01.2016, 09:07:17
Post #11





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 1.01.2016

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


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

Ten post edytował Emrys 2.01.2016, 09:14:44
Go to the top of the page
+Quote Post
trueblue
post 2.01.2016, 09:29:14
Post #12





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Pomyśl jeszcze co będzie, kiedy użytkownik zdecyduje usunąć post z ulubionych.


--------------------
Go to the top of the page
+Quote Post
Emrys
post 2.01.2016, 10:36:30
Post #13





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 1.01.2016

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


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 ;/
Go to the top of the page
+Quote Post
viking
post 2.01.2016, 10:51:43
Post #14





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


$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ń.


--------------------
Go to the top of the page
+Quote Post
Emrys
post 2.01.2016, 17:32:47
Post #15





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 1.01.2016

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




Postanowiłem, że zrobię to jednak normalnie bez kombinowania. Dzięki wszystkim, którzy próbowali mi pomóc wink.gif

Ten post edytował Emrys 2.01.2016, 21:00:13
Go to the top of the page
+Quote Post

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: 25.04.2024 - 15:38