Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MySQL] Losowe wczytanie dancyh z bazy danych
MrMethodCube
post 8.04.2018, 16:49:05
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 8.04.2018

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


Witam jest to mój pierwszy post. Jestem w trakcie tworzenia testownika. Mam bazę danych której wiersz wygląda następująco: [id][pytanie][odpa][odpb][poprawnaodp](chwilowo mam tylko dwa pytania i dwie odpowiedzi w celach testowych).
I jestem na etapie wczytania pytań oraz odpowiedzi. Pytania wczytuje pętlom for po ID. Lecz chciałbym zrobić to w taki sposób, żeby po wczytaniu strony pytania wyświetlały się w losowej kolejności. Lecz nie mam pomysłu jak to zrobić.
Mój aktualny kod wygląda następująco:
  1. require_once "connect.php";
  2. $polaczenie =@new mysqli($host, $db_user, $db_password, $db_name);
  3.  
  4. if($polaczenie->connect_errno!=0)
  5. {
  6. echo "Jest jakis blad";
  7. }
  8. else //kod dziala.
  9. {
  10. $nazwa_r=array();
  11.  
  12. for($i=1;$i<3;$i++)
  13. {
  14. $nazwa_r[$i]='radio'.$i; //indywidualne nazwy do radio.
  15. $sql= "SELECT * FROM praca WHERE id='$i'"; //zapytanie.
  16.  
  17. if($rezultat= @$polaczenie->query($sql))
  18. {
  19. $ile_pytan = $rezultat->num_rows;//liczba wierszy z naszym zapytaniem.
  20.  
  21. if($ile_pytan>0)
  22. {
  23. $wiersz = $rezultat->fetch_assoc();//tablica asocjacyjna.
  24. $id=$wiersz['id'];
  25. $pytanie=$wiersz['pytanie'];
  26. $odp1=$wiersz['odp1'];
  27. $odp2=$wiersz['odp2'];
  28. $poprawna=$wiersz['poprawna'];
  29.  
  30. echo $id.". <br> Pytanie:".$pytanie."<br>";
  31.  
  32. echo "Odpowiedzi: <br>";
  33.  
  34. echo "1. $odp1";
  35. echo "<input type='radio' name='$nazwa_r[$i]' value='$odp1'> <br>";
  36. echo "2. $odp2";
  37. echo "<input type='radio' name='$nazwa_r[$i]' value='$odp2'> <br>";
  38. echo "<br>";
  39.  
  40. $rezultat->close();
  41. }
  42. else
  43. {
  44. echo "W tej bazie nie ma pytan! :(";
  45. }
  46. }
  47. }
  48.  
  49. $polaczenie->close();
  50. }
  51.  
  52.  
  53.  
  54.  
  55.  

Go to the top of the page
+Quote Post
leonpro778
post 9.04.2018, 15:54:52
Post #2





Grupa: Zarejestrowani
Postów: 146
Pomógł: 19
Dołączył: 1.03.2012

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


Cytat(MrMethodCube @ 8.04.2018, 17:49:05 ) *
  1. $sql= "SELECT * FROM praca WHERE id='$i' ORDER BY RAND()"; //zapytanie.


Tak tak, wiem, zlinczujecie mnie za to biggrin.gif

Ten post edytował leonpro778 9.04.2018, 15:56:11
Go to the top of the page
+Quote Post
nospor
post 9.04.2018, 16:16:03
Post #3





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




@leonpro778 a teraz spojrz jeszcze raz na zapytanie co wkleiles i zastanow sie 100 razy czy ma ono jakikolwiek sens.
I nie, nie mowie tu o sensie zastosowania nieoptymalnego order by rand()

ps: jakby sie nie domyslil to czytaj dalej....

.
.
.
.
.
.
.
.
.
.
.
.... jaki jest sens losowac dane ze zbioru, ktory zawiera tylko jeden element?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
leonpro778
post 10.04.2018, 07:06:17
Post #4





Grupa: Zarejestrowani
Postów: 146
Pomógł: 19
Dołączył: 1.03.2012

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


Cytat(nospor @ 9.04.2018, 17:16:03 ) *
.... jaki jest sens losowac dane ze zbioru, ktory zawiera tylko jeden element?

Wiem, że w składni wskazuje na JEDEN element dlatego napisałem RAND() smile.gif żeby naprowadzić kolegę na inny sposób rozwiązania problemu bo:

Cytat(MrMethodCube @ 8.04.2018, 17:49:05 ) *
...chwilowo mam tylko dwa pytania i dwie odpowiedzi w celach testowych...

Po prostu chciałem pokazać, że można trochę inaczej przerobić ten kod smile.gif Mój błąd, że nie rozwinąłem o co mi chodzi:
  1. <?php
  2. // require_once "connect.php";
  3. $polaczenie =@new mysqli($host, $db_user, $db_password, $db_name);
  4.  
  5. if($polaczenie->connect_errno!=0)
  6. {
  7. echo "Jest jakis blad";
  8. }
  9. else //kod dziala.
  10. {
  11. $sql= "SELECT * FROM praca WHERE ORDER BY RAND()"; //zapytanie.
  12. if($rezultat= @$polaczenie->query($sql))
  13. {
  14. while($wiersz = $rezultat->fetch_assoc()) //tablica asocjacyjna.
  15. {
  16. $id=$wiersz['id'];
  17. $pytanie=$wiersz['pytanie'];
  18. $odp1=$wiersz['odp1'];
  19. $odp2=$wiersz['odp2'];
  20. $poprawna=$wiersz['poprawna'];
  21.  
  22. echo $id.". <br> Pytanie:".$pytanie."<br>";
  23.  
  24. echo "Odpowiedzi: <br>";
  25.  
  26. echo "1. $odp1";
  27. echo "<input type='radio' name='$nazwa_r[$i]' value='$odp1'> <br>";
  28. echo "2. $odp2";
  29. echo "<input type='radio' name='$nazwa_r[$i]' value='$odp2'> <br>";
  30. echo "<br>";
  31.  
  32. $rezultat->close();
  33. }
  34. }
  35. }


Oczywiście Ja bym zrobił to inaczej. Bo wpierw wczytałbym WSZYSTKIE id pytań do jakiejś tablicy, następnie je pomieszał i pętlą foreach wyświetlał smile.gif

Cytat( @ 9.04.2018, 17:16:03 ) *
I nie, nie mowie tu o sensie zastosowania nieoptymalnego order by rand()

Dla dwóch pytańquestionmark.gif? biggrin.gif biggrin.gif biggrin.gif

Ten post edytował leonpro778 10.04.2018, 07:08:31
Go to the top of the page
+Quote Post
emillo91
post 10.04.2018, 10:56:52
Post #5





Grupa: Zarejestrowani
Postów: 129
Pomógł: 13
Dołączył: 29.03.2012

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


coś takiego??
  1. $tab = [1,2,3];
  2.  
  3. shuffle($tab);
  4.  
  5. echo implode(',', $tab);
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: 24.04.2024 - 05:44