Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Macie pomysły na zmianę kodu, żeby działał, tak jak należy?
miedzna
post 6.09.2005, 13:06:52
Post #1





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


Po krótce, mam w bazie tabelę z ludźmi, każdy ma wpisane imię, nazwisko itd oraz każdy ma komórkę los domyślnie z wartością 0. Poniżej kod, który z założenia miał wylosować z tej bazy tyle osób, ile jest w zmienne $bilety_szt, ale oczywiście nie działa jak należy.
  1. <?php
  2.  
  3. include('config.php');
  4. $bilety_szt = 4; //ilosc dostepnych biletow
  5. $result = mysql_query('select id from centrum'); 
  6. $uczestnikow = mysql_num_rows($result); //sprawdzam ilosc zgloszonych
  7. for($i=1; $i<=$bilety_szt; $i++){
  8. $wylosowany = rand(1,$uczestnikow); //losuje numer id
  9. $los = "UPDATE centrum SET los = 1 WHERE id = $wylosowany AND los !=1"; //zmieniam w bazie zmienną los z 0 na 1, co oznacza, ze zostal wylosowany
  10. $wynik_losu = mysql_query($los);
  11. }
  12. $sql2 = "SELECT imie, nazwisko FROM centrum WHERE los = 1"; // a tu lukam kto został wylosowany
  13. $result = mysql_query($sql2);
  14. while ($row = mysql_fetch_array($result)) {
  15.     printf("Wylosowałem: %s %s<BR>", $row["imie"], $row["nazwisko"]);
  16. }
  17.  
  18. ?>


dziala to tak, że po każdym odświeżeniu strony losuje znowu i aż wszyscy w bazie mają w komórce los wpisaną 1 a chodzi o to, żeby wylosował tylko tyle, ile jest w zmiennej $bilety_szt i oczywiście, żeby nikt się 2 razy nie powtórzył. Kurka, siedzę nad tym i jakoś nie mam natchnienia...

Dzieki za pomoc.

Ten post edytował miedzna 6.09.2005, 13:07:44
Go to the top of the page
+Quote Post
mike
post 6.09.2005, 13:35:58
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Hmm, strasznie zagmatfany ten kod, Nie lepiej tak:

  1. <?php
  2.  
  3. include('config.php');
  4.  
  5. $intTickets = 4;
  6.  
  7. $strSQL = 'UPDATE centrum SET los = 1 WHERE id IN (SELECT id FROM centrum ORDER BY RAND() LIMIT ' . $intTickets . ') AND los !=1';
  8. mysql_query( $strSQL );
  9.  
  10. $sqlSQL = "SELECT imie, nazwisko FROM centrum WHERE los = 1";
  11. $resSelect = mysql_query( $sqlSQL );
  12. while( $row = mysql_fetch_array( $resSelect ) )
  13. {
  14. printf("Wylosowałem: %s %s<BR>", $row["imie"], $row["nazwisko"]);
  15. }
  16.  
  17. ?>
Go to the top of the page
+Quote Post
miedzna
post 6.09.2005, 13:46:22
Post #3





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


Twoje rozwiązanie jest lepsze, ale coś nie działa, nie zmienia w bazie losowe komórki LOS z 0 na 1 sad.gif, ale próbuje...

Ten post edytował nospor 6.09.2005, 13:49:59
Go to the top of the page
+Quote Post
mike
post 6.09.2005, 14:13:32
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


A jakiego typu masz to pole los :?:
Go to the top of the page
+Quote Post
miedzna
post 6.09.2005, 14:14:44
Post #5





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


VARCHAR(1)
Go to the top of the page
+Quote Post
mike
post 6.09.2005, 14:24:10
Post #6





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


1. To już lepiej w ENUM( '0', '1' )
2. W zapytaniach ujmuj w apostrofy wartości związane z tym polem (w końcu to stringi): ... SET los = '1' ... WHERE los != '1' ...
Go to the top of the page
+Quote Post
miedzna
post 6.09.2005, 14:46:37
Post #7





Grupa: Zarejestrowani
Postów: 401
Pomógł: 1
Dołączył: 10.03.2004
Skąd: Warszawa

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


Nie działa sad.gif
Go to the top of the page
+Quote Post
sajborg
post 6.09.2005, 15:01:14
Post #8





Grupa: Zarejestrowani
Postów: 271
Pomógł: 0
Dołączył: 20.08.2003
Skąd: Szczecinek

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


spropob tak

  1. <?php
  2.  
  3. $strSQL = "UPDATE centrum SET los = '1' WHERE id IN (SELECT id FROM centrum ORDER BY RAND() LIMIT ' . $intTickets . ') AND los !='1'";
  4. ?>


Ten post edytował paweb 6.09.2005, 15:01:34


--------------------
Warsztat: gPHPEdit | Linux 2.6.17-11-generic (Ubuntu)
Sprzęt: Noteook BenQ A33E
___________________________________________________
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: 18.07.2025 - 00:22