Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z zapytaniem
Forum PHP.pl > Forum > Bazy danych > MySQL
slaweks
Witam wszystkich

Mam takie pytanie
Mając tabele składającą się z kolumn: id imie nazwisko glosy
i w tej tabeli mam np 200 rekordów
To jakie mogę zadać zapytanie do bazy aby każdego dnia był dodawany jeden głos losowo wybranym ludziom np 10 osobom
Czyli każdego dnia dla losowo wybranych 10 osób każda z nich dostanie po 1 głosie??
rygiel
Przykładowy algorytm
1. Jeśli tylko 200 rek. to możesz wrzucić id tych rekordów do tablicy (im więcej tym gorzej działa!!!)
2. losujesz 10 nie powtarzalnych liczb z zakresu 1-200
3. wybierasz elementy z tab utworzonej w punkcie 1
4. robisz update głosów dla wybranych ID

ps. jest jeszcze w sql coś takiego jak RAND()
pantomas
Czysty mysql:
UPDATE tabela set glosy=glosy+1 order by rand() limit 10
slaweks
to zapytanie jest ok i dziękuje za to, a jak jeszcze uzależnić że to zapytanie ma wykonywać się każdego dnia po jednym razie??
rygiel
skrypt trzeba w CRON-ie odpalać
slaweks
troche może głupio to zabrzmi ale nie wiem co to jest CRON

a czy tega zapytania nie można napisać tak
UPDATE tabela set glosy=glosy+1 order by rand() limit 10
tylko że jakoś uzależnić od dnia i wrzucić funkcję mktime??

nie wiem czy dobrze mysle

chyba że to zapytanie wrzucić normalnie do jakiegoś pliku PHP i dopiero w php trzeba napisać funkcję która będzie tylko raz dziennie wywołać to zapytanie??

sam już nie wiem jak to powinno być sadsmiley02.gif
MMX3
crontab = odpalanie skryptów o określonym czasie

man crontab w shellu

odpalasz skrypt:
np. vote.php cronem w Cpanelu masz jakiś kreator kronowy.

a vote.php

1. Czytasz wszystkie id do tablicy

  1. <?php
  2. $sql = "select * from tabela";
  3. $res = mysql_query($sql);
  4. while($row==mysql_fetch_array($res)) {
  5.  $tab[][0] = $row['id']; 
  6.  $tab[][1] = $row['glosy']; 
  7.  
  8. }
  9. ?>

2. Teraz losujesz te 10. Z powtórzeniami wersja.
  1. <?php
  2. $count = count($tab); // ilość rekordów
  3. for($i=0; $i<10; $i++) {
  4.  $los = rand()%$count;
  5.  $glosy = $tab[$los][1]+1;
  6.  $sql = "update tabela set glosy = '".$glosy."' where id = ".$tab[$los][0]." ;";
  7.  $res = mysql_query($sql);
  8. }
  9. ?>


W sumie to tyle
Indeo
Myślę, że największy problem będzie z tym crontabem, bo niewiele osób ma dostęp do shella, a jeszcze mniej ma dostęp do crona winksmiley.jpg
rygiel
można pokusić się o inne roziwązanie jeśli na stronę wchodzi więcej niż 1 osoba . Wystarczy gdzieś zapisywać że skrypt został dziś odpalony i jeśli nie to go uruchomić.
slaweks
no właśnie ja mam z tym problem

i jeśli jest to możliwe to chciałbym poznać jakieś rozwiązanie prostrze lub takie które będe mógł zapisać np w phpie
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.