Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/PSQL] Losowanie bez powtórzeń
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
pelzak
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
dr_bonzo
A moze tak:
  1. ...ORDER BY RANDOM() LIMIT $ilosc_Pytan

pytania (z odpowiedziami) zapisujesz do sesji a potem je wykorzystujesz na kolejnych stronach.
pelzak
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
SongoQ
Zapisujesz do tablicy i przypisujesz do sesji.
pelzak
Prosze o przyklad bo nigdy jeszcze nie przypisywalem tablicy do sesji.
dr_bonzo
  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. ?>
pelzak
Narazie zalapalem. I ide dalej z pisaniem programu.

Dzieki za pomoc wszystkim
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.