Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL]zmiana tekstu po odświeżeniu
morarz
post
Post #1





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 4.02.2011

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


Witam,

Mam pytanie bo nie wiem jaką funkcję do tego zastosować z PHP,

wyciągam dane z bazy danych i wyświetlam je na stronie, jest to 5 informacji (title), ale chciałbym żeby za każdym razem po odświeżeniu były to inne 5 informacji jak się do tego zabrać questionmark.gif
Go to the top of the page
+Quote Post
kadlub
post
Post #2





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


czyli chcesz za każdym odświeżeniem strony mieć inne dane wyciągane z bazy
to musisz zmienić zapytanie przy każdym odświeżeniu strony więc
nie wiem jakie masz zapytanie ale jak pobierasz rekord po id a te pięć danych ma być losowe to zrób sobie
np
  1. $id=rand(1,19) ;
  2. $sql=mysql_query("select * from tabela where id='".$id."' ");


pokarz kod będzie łatwiej

Ten post edytował kadlub 5.04.2011, 11:36:48
Go to the top of the page
+Quote Post
peter13135
post
Post #3





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


  1. $sql=mysql_query("select * from tabela ORDER BY rand() LIMIT 5);

ale...
http://blog.ksiazek.info/2010/05/04/order-by-rand-to-zlo/

Więc możesz wylosować 5 idków za pomocą rand() w php sprawdzając czy się nie powtarzają.
a potem zapytanie zrobić tak:

  1. $sql=mysql_query("select * from tabela WHERE ID in(" . implode(',', $tablica_id) . ")");


Ten post edytował peter13135 5.04.2011, 11:41:16


--------------------
:)
Go to the top of the page
+Quote Post
morarz
post
Post #4





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 4.02.2011

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


Zrobiem tak i mam zapytanie błąd :
  1. $id=rand(1,19) ;
  2. $sql = "select * from phpbb_topics where id='".$id."' ";
  3. $result = mysql_query($sql) or die("Zapytanie błąd");
  4.  
  5. for($x=1;$x<=5;$x++){
  6. $row = mysql_fetch_array($result);
  7. echo "<ul>";
  8. echo "<li><a href = \"http://www.garwolinskie.info/forum/viewtopic.php?f=$row[forum_id]&t=$row[topic_id]\">$row[topic_title]</a><br></li>";
  9. echo "</ul>";


questionmark.gifquestionmark.gif?

Hej Peter a ta zmienna tablica_id to do czego questionmark.gif?

Ten post edytował morarz 5.04.2011, 16:24:13
Go to the top of the page
+Quote Post
kadlub
post
Post #5





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


  1. $tab=array();
  2. $liczba=19;//liczba id w bazie
  3. for($x=1;$x<=5;$x++){
  4. $id=rand(1,$liczba);
  5. if(!in_array($id,$tab)){
  6. array_push($tab,$id);
  7. $result = mysql_query("select * from phpbb_topics where id='".$id."' ") or die(mysql_error());
  8. $row = mysql_fetch_array($result);
  9. echo "<ul>";
  10. echo '<li><a href = "http://www.garwolinskie.info/forum/viewtopic.php?f='.$row['forum_id'].'&t='.$row['topic_id'].'">'.$row['topic_title'].'</a><br></li>';
  11. echo "</ul>";
  12. }
  13. else{
  14. $x--;
  15. }
  16. }
  17.  


trochę na sztywno więc nie wiem czy cię to zadowoli
Go to the top of the page
+Quote Post
peter13135
post
Post #6





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


@kadlub
Czy nie sądzisz że Twój sposób jest nieco nieoptymalny ?
Jeśli kolejno losowane liczby będą takie same, to tablica będzie miała tylko 1 element, a wszystkie artykuły będą takie same
Twoja tablica nie jest nigdzie używana.
Integer nie string, nie wymaga apostrofów

@morarz
$tablica id, to taka która miała by zawierać wylosowane przez Ciebie id. Widzę że nie potrafisz skorzystać z moich wskazówek, więc napiszę całość. (korzyystając trochę z powyższego przykładu)
  1. $tab=array();
  2. $liczba=19;//liczba id w bazie
  3. while(count($tab)<5)
  4. {
  5. $id=rand(1,$liczba);
  6. if(!in_array($id,$tab))
  7. array_push($tab,$id);
  8. }
  9. $result = mysql_query('select * from phpbb_topics where id in(' . implode(',',$tab) . ')' ) or die(mysql_error());

dalej zrób jak post wyżej, albo całkiem po swojemu.
PS. żeby kod nie ulegał zapętleniu, $liczba musi być >= 5, inaczej kod się zapętli. Dodanie odpowiedniego warunku pozostawiam Tobie.

Ten post edytował peter13135 5.04.2011, 18:43:41


--------------------
:)
Go to the top of the page
+Quote Post
kadlub
post
Post #7





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


Cytat(peter13135 @ 5.04.2011, 19:41:06 ) *
@kadlub
Czy nie sądzisz że Twój sposób jest nieco nieoptymalny ?
Jeśli kolejno losowane liczby będą takie same, to tablica będzie miała tylko 1 element, a wszystkie artykuły będą takie same
Twoja tablica nie jest nigdzie używana.
Integer nie string, nie wymaga apostrofów

  1. if(!in_array($id,$tab))
  2. array_push($tab,$id);

a jak myślisz co robi ten kawałek kodu??

  1. $tab=array();
  2. $liczba=19;//liczba id w bazie
  3. for($x=1;$x<=5;$x++){
  4. $id=rand(1,$liczba);
  5. if(!in_array($id,$tab)){
  6. array_push($tab,$id);
  7. $result = mysql_query("select * from phpbb_topics where id='".$id."' ") or die(mysql_error());
  8. $jest=mysql_num_rows($result);
  9. if($jest==1){
  10. $row = mysql_fetch_array($result);
  11. echo "<ul>";
  12. echo '<li><a href = "http://www.garwolinskie.info/forum/viewtopic.php?f='.$row['forum_id'].'&t='.$row['topic_id'].'">'.$row['topic_title'].'</a><br></li>';
  13. echo "</ul>";
  14. }
  15. else
  16. {
  17. $x--;
  18. }
  19. }
  20. else{
  21. $x--;
  22. }
  23. }


bardziej z optymalizowany
tamten miał wadę że jak np id nie były kolejne tylko np 1,2, 5, 8, 12
to wyświetlał czasami puste miejsca

Ten post edytował kadlub 5.04.2011, 19:28:59
Go to the top of the page
+Quote Post
peter13135
post
Post #8





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


Cytat
a jak myślisz co robi ten kawałek kodu??

Myślę że odpala rakietę.
Ok. Masz rację. Sam się zaplątałem, źle odczytałem wyrażenia warunkowe (bo brak wcięć tongue.gif)
Ale nie zmienia to faktu że robisz aż 5 zapytań, co nie jest optymalne. Już lepiej jest zrobić tak.
  1. $sql=mysql_query('select * from tabela ORDER BY rand() LIMIT 5');

Co prawda też nie idealne bo rand() w mysql robi tymczasową tabelę, ale jednak lepsze to niż 5 zapytań i jest znacznie prostsze w implementacji (jedna linijka to nie kilkanaście)

Ten post edytował peter13135 5.04.2011, 20:11:13


--------------------
:)
Go to the top of the page
+Quote Post
morarz
post
Post #9





Grupa: Zarejestrowani
Postów: 52
Pomógł: 0
Dołączył: 4.02.2011

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


Wy tu gadu gadu a u mnie pięknie ładnie działa.

Dla obydwu po "Pomógł".

Dzięki serdecznie.

Pozdr.

Spójrzcie sobie na listę postów :

"Cytata jak myślisz co robi ten kawałek kodu?? "

lol biggrin.gif



Ten post edytował morarz 5.04.2011, 20:29:56
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 Aktualny czas: 20.08.2025 - 20:30