Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php/PSQL] Losowanie bez powtórzeń
pelzak
post 7.01.2006, 10:41:06
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 20.02.2005

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


Witam!

  1. <?php
  2.  
  3. $db=pg_connect("dbname=aaa user=aaa password=abc");
  4.  
  5. $sel=pg_exec($db,"select id_pytania,tresc from pytania 
  6.  where id_testu=$id_testu order by random() limit 1");
  7.  
  8. for ($i=0;$i<pg_NumRows($sel);$i++)
  9. list($id_pytania,$tresc)=pg_Fetch_Row($sel);
  10.  
  11. echo "<b>$tresc ?</b>";
  12.  
  13. ?>


Aby uniknac wylosowania ponownie tego samego pytania potrzebuje, aby ID pytania było zapisywane np. w tablicy. Potem po losowaniu kolejnego pytania trzebaby sprawdzac czy obecne ID juz nie wystapilo. Jezeli juz było to losujemy ponownie. Jezeli nie to wyswietlam pytanie.

Dodam jeszcze, ze pytania sa wyswietlane pojedynczo (losuje, wyswietla pytanie z odp, uzytkownik zaznacza odp i wciska dalej; i tak w kolko az zakonczy test)

Jakby ktos mogl to prosze o napisanie wlasnie takiego skryptu. Poniewaz probowalem na rozne sposoby rozwiazac ten problem, ale nigdy mi sie nie udawalo.

Słyszałem o DISTINC. Zastosowałem je, ale i tak powtorzylo sie pytanie.

  1. <?php
  2.  
  3. $sel=pg_exec($db,"SELECT DISTINCT id_pytania,tresc, random() FROM pytania
  4.  WHERE id_testu=1 ORDER BY 3 LIMIT 1");
  5.  
  6. ?>


Pozdrawiam

Ten post edytował pelzak 7.01.2006, 10:42:47
Go to the top of the page
+Quote Post
dr_bonzo
post 7.01.2006, 10:49:14
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


A moze tak:
  1. ...ORDER BY RANDOM() LIMIT $ilosc_Pytan

pytania (z odpowiedziami) zapisujesz do sesji a potem je wykorzystujesz na kolejnych stronach.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
pelzak
post 7.01.2006, 13:47:02
Post #3





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 20.02.2005

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


Dobra sugestia. Sprobuje to tak zrobic.

W razie czego znowu sie zglosze.


EDIT:

Probowalem na rozne sposoby. Ale nie wiem jak zapisac np. 10 zmiennych naraz do zmiennej sesyjnej. Wedlug sugesti ~dr_bonzo

Moze jakis przyklad

Ten post edytował pelzak 7.01.2006, 19:01:52
Go to the top of the page
+Quote Post
SongoQ
post 7.01.2006, 19:30:05
Post #4





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


Zapisujesz do tablicy i przypisujesz do sesji.


--------------------
Go to the top of the page
+Quote Post
pelzak
post 7.01.2006, 19:41:21
Post #5





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 20.02.2005

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


Prosze o przyklad bo nigdy jeszcze nie przypisywalem tablicy do sesji.
Go to the top of the page
+Quote Post
dr_bonzo
post 7.01.2006, 19:53:01
Post #6





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


  1. <?php
  2. $_SESSION[ 'zmienna_sesyjna' ] = 1;
  3. $_SESSION[ 'a_to_jest_druga_zmienna_sesyjna' ] = 3;
  4. $_SESSION[ 'a_czemu_by_nie_przypisac_tutaj_tablicy'] = array( 'a', 'index_tablicy' => 'b', 'c' );
  5. $_SESSION[ 'SESSION_to_przeciez_zwykla_tablica' ] = $_SESSION[ 'a_czemu_by_nie_przypisac_tutaj_tablicy'][ 'index_tablicy ' ] ;
  6. ?>


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
pelzak
post 7.01.2006, 20:21:11
Post #7





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 20.02.2005

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


Narazie zalapalem. I ide dalej z pisaniem programu.

Dzieki za pomoc wszystkim

Ten post edytował pelzak 7.01.2006, 23:54:40
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: 15.06.2025 - 07:07