Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL]losowy rekord
kleszczoscisk
post
Post #1





Grupa: Zarejestrowani
Postów: 164
Pomógł: 3
Dołączył: 13.12.2007

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


Proszę o podpowiedź, jak ugryźć problem: wyświetlanie losowego rekordu z bazy, raz dziennie, czyli od północy do północy przez 24h (albo raz w tygodniu,miesiącu,itp).
Dzięki z góry


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

Siedź cicho, kiedy śpi licho.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
Maxik
post
Post #2





Grupa: Zarejestrowani
Postów: 726
Pomógł: 129
Dołączył: 10.01.2008
Skąd: Gdańsk

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


W nocy odpalasz crona, losuje Ci randem liczbę, zapisujesz ją do bazy i wyświetlasz rekord WHERE liczba=$liczbazbazy

Ten post edytował Maxik 17.10.2008, 14:23:14


--------------------
Pomogłem? Kliknij przycisk Pomógł pod pomocnym Ci postem.
http://maxik.me/
Go to the top of the page
+Quote Post
--Pitter--
post
Post #3





Goście







Od razu mówie że nie wiem czy to będzie działać.

  1. <?
  2. $time = date("H:i");
  3.  
  4. if($time=='23:00')
  5. {
  6. $ile = mysql_num_rows(mysql_query(SELECT * FROM tabela));
  7.  
  8. $rekord = rand(1,$ile);
  9.  
  10. $query = "SELECT * FROM $tbl WHERE id='$rekord'";
  11. $result = mysql_query($query);
  12. $r = mysql_fetch_array($result);
  13. }
  14. ?>
Go to the top of the page
+Quote Post
kleszczoscisk
post
Post #4





Grupa: Zarejestrowani
Postów: 164
Pomógł: 3
Dołączył: 13.12.2007

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


Cytat(Maxik @ 17.10.2008, 15:23:06 ) *
W nocy odpalasz crona, losuje Ci randem liczbę, zapisujesz ją do bazy i wyświetlasz rekord WHERE liczba=$liczbazbazy

Dzięki za odpowiedź, a może tak:
1. w czasie pierwszej po północy odsłony strony skrypt losuje rekord i zapisuje wynik(z datą) do innej bazy czy gdziekolwiek,
2. przez następną dobę , do północy, skrypt sprawdza czy aktualna data = data z rekordu, i jesli tak to wyswietlany jest rekord
3. po północy pkt.1
Co o tym sądzicie?
Bo z Cronem będzie cieżko... :-/
A może w MySQL są jakieś dedykowane rozwiązania?


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

Siedź cicho, kiedy śpi licho.
Go to the top of the page
+Quote Post
Maxik
post
Post #5





Grupa: Zarejestrowani
Postów: 726
Pomógł: 129
Dołączył: 10.01.2008
Skąd: Gdańsk

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


Z Cronem jest prosto, są strony które oferują crona za darmo, wykonują Ci skrypt co określony czas(np. http://www.cronjobs.org/ )

Ustawiasz oddzielne zadanie dla crona i sprawdzasz IP, żeby nikt nie zrobił Ci psikusa. Zrobienie czegoś takiego jest bardzo proste


--------------------
Pomogłem? Kliknij przycisk Pomógł pod pomocnym Ci postem.
http://maxik.me/
Go to the top of the page
+Quote Post
JarCzeS
post
Post #6





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 5.05.2008

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


tez bym byl za cronem a zapytanie bym tak napisal:
Kod
SELECT * FROM przykladowa_tabela ORDER BY RAND() LIMIT 1


ah i zapytanie te nie bedzie wydajne dla duzych baz danych (kilkanascie tys. rekordow)

Ten post edytował JarCzeS 17.10.2008, 14:41:27
Go to the top of the page
+Quote Post
kleszczoscisk
post
Post #7





Grupa: Zarejestrowani
Postów: 164
Pomógł: 3
Dołączył: 13.12.2007

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


Cytat(Maxik @ 17.10.2008, 15:36:34 ) *
Z Cronem jest prosto, są strony które oferują crona za darmo, wykonują Ci skrypt co określony czas(np. http://www.cronjobs.org/ )
Ustawiasz oddzielne zadanie dla crona i sprawdzasz IP, żeby nikt nie zrobił Ci psikusa. Zrobienie czegoś takiego jest bardzo proste

Próbowałem już z cronem, hosting mam taki, ze wszystko musi przechodzic przez administratora. Nie lubię tak :-)


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

Siedź cicho, kiedy śpi licho.
Go to the top of the page
+Quote Post
Maxik
post
Post #8





Grupa: Zarejestrowani
Postów: 726
Pomógł: 129
Dołączył: 10.01.2008
Skąd: Gdańsk

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


JarCzes, ale to wylosuje Ci inny rekord za każdym wywołaniem zapytania, a tu chodzi o wylosowanie raz na dobę.


--------------------
Pomogłem? Kliknij przycisk Pomógł pod pomocnym Ci postem.
http://maxik.me/
Go to the top of the page
+Quote Post
webasek
post
Post #9





Grupa: Zarejestrowani
Postów: 274
Pomógł: 35
Dołączył: 18.07.2008
Skąd: Kielce

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


Twoje rozwiązanie bez crona wydaje się sensowne smile.gif myślę, że tak można


--------------------
"Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota,
choć nie jestem pewien co do tej pierwszej." Albert Einstein

Wirtualny Rynek Predykcyjny
Go to the top of the page
+Quote Post
JarCzeS
post
Post #10





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 5.05.2008

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


z cronem mozesz zrobic tak(nie gwarantuje ze bedzie dzialalo nie sprawdzalem kodu pisze z pamieci):
  1. <?
  2.  $time = date("H:i");
  3.  $data= date("Y-m-d");
  4.  
  5.  $query = "SELECT wartosc FROM cron WHERE data='".$data."'";
  6.  $cron = mysql_fetch_result($query);
  7.  
  8.  if($time>'23:00' and !$cron)
  9.  {
  10.  $query = "INSERT INTO cron VALUES('".$data."',1)";
  11.  $result = mysql_query($query);
  12.  
  13.  $query = "SELECT * FROM przykladowa_tabela ORDER BY RAND() LIMIT 1";
  14.  $result = mysql_query($query);
  15.  $random = mysql_fetch_array($result);
  16.  //i tutaj sobie zapisujesz gdzies ten random nie wiem co z nim chcesz zrobic, nastepnego dnia jest nadpisywany itd
  17.  }
  18.  ?>

warunkiem jest oczywiscie ze ktos wejdzie na strone po 23 kazdego dnia

Ten post edytował JarCzeS 17.10.2008, 14:53:24
Go to the top of the page
+Quote Post
kleszczoscisk
post
Post #11





Grupa: Zarejestrowani
Postów: 164
Pomógł: 3
Dołączył: 13.12.2007

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


Takie coś napisałem, wieczorem będę sprawdzał, jak myślicie zadziała ?
  1. <?
  2.    //dzisiejsza data
  3.    $today = date("Y-m-d");
  4.    //zapytanie do bazy dzieła dnia
  5.    $zapytanie=("SELECT * FROM `dzielodnia` WHERE `data`='$today' ");
  6.    $wykonaj=mysql_query($zapytanie);
  7.    //jeśli są wyniki
  8.        if(mysql_num_rows($wykonaj) > 0){
  9.        //wyswietlanie wyników
  10.        }
  11.        else{
  12.        //pobieranie losowego dzieła z bazy, takiego którego nie ma jeszcze w bazie dzieła dnia
  13.        //$zapytanie=("SELECT * FROM `dziela` ORDER BY RAND() LIMIT 1");
  14.        $zapytanie = mysql_query("SELECT * FROM `dziela`  LEFT  JOIN `dzielodnia` ON dziela.id = dzielodnia.dd_id  WHERE dziela.id<>dzielodnia.dd_id ORDER BY RAND() LIMIT 1") or die ('błąd');
  15.        $wykonaj=mysql_query($zapytanie);
  16.        $w = mysql_fetch_array($wykonaj);
  17.            //jeśli jest wynik
  18.            if(mysql_num_rows($wykonaj) > 0){
  19.                $dd_id = $w['id'];
  20.                //dodanie do bazy dzieła dnia rekordu
  21.                $zapytanie2 =  mysql_query("INSERT INTO `dzielodnia` VALUES ('','$dd_id','$today',''$itd'')");
  22.                    if($zapytanie2) { echo 'łokiej';}
  23.                    else { echo 'błąd';}
  24.            }
  25.        
  26.       $zapytanie3=("SELECT * FROM `dzielodnia` WHERE `data`='$today' ");
  27.       $wykonaj3=mysql_query($zapytanie3);
  28.           //jeśli są wyniki
  29.           if(mysql_num_rows($wykonaj3) > 0){
  30.           //wyswietlanie wyników
  31.          }
  32.    }
  33. ?>


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

Siedź cicho, kiedy śpi licho.
Go to the top of the page
+Quote Post
JarCzeS
post
Post #12





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 5.05.2008

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


troche to chaotyczne ale mam nadzieje ze zadziala smile.gif gl
Go to the top of the page
+Quote Post
kleszczoscisk
post
Post #13





Grupa: Zarejestrowani
Postów: 164
Pomógł: 3
Dołączył: 13.12.2007

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


Tak zrobiłem i sprawdzałem - działa. Pewnie rozwiązanie z cronem jest normalniejsze, ale jak sądzicie, tak też można? Czy to w złym stylu? (uczę się php i mysql :-))
Pozdrawiam

  1. <?php
  2. //dzisiejsza data
  3.    $today = date(&#092;"Y-m-d\");
  4.    //zapytanie do bazy dzieladnia
  5.    $zapytanie=(&#092;"SELECT * FROM `dzielodnia` LEFT  JOIN `dziela`  ON dzielodnia.dd_id = dziela.id WHERE dzielodnia.dd_data='$today' \");
  6.    $wykonaj=mysql_query($zapytanie);
  7.  
  8.    //jeśli są wyniki pokazuje
  9.        if(mysql_num_rows($wykonaj) > 0){
  10.        //wyswietlanie wyników
  11.        $wn = mysql_fetch_array($wykonaj);
  12.        echo 'OK. Jest dzieło dnia nr '.$wn['id'].'
  13. ';
  14.        }
  15.    //jeśli nie ma    
  16.        else{
  17.                
  18.        //pobieranie losowego dzieła z bazy, takiego którego nie ma jeszcze w bazie dzieła dnia
  19.        $zapytanie2 = (&#092;"SELECT * FROM `dziela`  LEFT JOIN `dzielodnia` ON dziela.id = dzielodnia.dd_id  WHERE dziela.id<>dzielodnia.dzielo_id ORDER BY RAND() LIMIT 1\");
  20.  
  21.        $wykonaj2=mysql_query($zapytanie2);
  22.        $w2 = mysql_fetch_array($wykonaj2);
  23.            //jeśli jest wynik
  24.            if(mysql_num_rows($wykonaj2) > 0){
  25.                //zmienne            
  26.                $did = $w2['id'];
  27.                //dodanie rekordu do bazy dzielodnia
  28.                $zapytanie3 =  mysql_query(&#092;"INSERT INTO `dzielodnia` VALUES ('','$did','$today')\") or die('blad 3');
  29.            }
  30.            // jednorazowy komunikat
  31.            $wn = mysql_fetch_array($wykonaj);
  32.            echo 'OK. Wlasnie wybrałem dzieło dnia. Odśwież tę stronę aby je zobaczyć
  33. ';
  34. }
  35. ?>


edit: źle działa - problem z duplikatami ($zapytanie2) :-|

poprawiam, teraz chyba jest OK:
  1. <?php
  2. $zapytanie2 = (&#092;"SELECT * FROM `dziela`  LEFT JOIN `dzielodnia` ON dziela.id <> dzielodnia.dzielo_id ORDER BY RAND() LIMIT 1\");
  3. ?>

Nie działa :-|

tak też nie działa...
  1. <?php
  2. $zapytanie2 = ("SELECT dziela.id, dzielodnia.dd_dzielo FROM dziela, dzielodnia WHERE dziela.id <> dzielodnia.dd_dzielo ORDER BY RAND() LIMIT 1");
  3. ?>

help!
Jak pobrać z jednej tabeli 'id' taki aby nie było go w drugiej tabeli, po to by go do niej wprowadzić ?

Ten post edytował kleszczoscisk 17.10.2008, 18:30:34


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

Siedź cicho, kiedy śpi licho.
Go to the top of the page
+Quote Post
JarCzeS
post
Post #14





Grupa: Zarejestrowani
Postów: 42
Pomógł: 0
Dołączył: 5.05.2008

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


za linijka
  1. <?php
  2. $wykonaj2=mysql_query($zapytanie2);
  3. ?>

dodaj
  1. <?php
  2. ?>

zobaczy co mu nie pasuje
Go to the top of the page
+Quote Post
kleszczoscisk
post
Post #15





Grupa: Zarejestrowani
Postów: 164
Pomógł: 3
Dołączył: 13.12.2007

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


Cytat(JarCzeS @ 17.10.2008, 21:07:17 ) *
za linijka
  1. <?php
  2. $wykonaj2=mysql_query($zapytanie2);
  3. ?>

dodaj
  1. <?php
  2. ?>

zobaczy co mu nie pasuje

Robiłem :-) Błędów nie ma , zapytanie chyba jest OK ale nie wyklucza dodawania duplikatów.


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

Siedź cicho, kiedy śpi licho.
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: 21.08.2025 - 23:56