Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z zapytaniem
slaweks
post 19.12.2007, 14:37:00
Post #1





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 19.12.2007

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


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??
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
rygiel
post 19.12.2007, 14:52:21
Post #2





Grupa: Zarejestrowani
Postów: 17
Pomógł: 1
Dołączył: 26.11.2007
Skąd: Łódź

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


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()

Ten post edytował rygiel 19.12.2007, 15:03:12


--------------------
Programista PHP
Go to the top of the page
+Quote Post
pantomas
post 19.12.2007, 15:18:01
Post #3





Grupa: Zarejestrowani
Postów: 5
Pomógł: 2
Dołączył: 12.12.2007

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


Czysty mysql:
UPDATE tabela set glosy=glosy+1 order by rand() limit 10
Go to the top of the page
+Quote Post
slaweks
post 19.12.2007, 15:22:12
Post #4





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 19.12.2007

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


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??
Go to the top of the page
+Quote Post
rygiel
post 19.12.2007, 15:38:46
Post #5





Grupa: Zarejestrowani
Postów: 17
Pomógł: 1
Dołączył: 26.11.2007
Skąd: Łódź

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


skrypt trzeba w CRON-ie odpalać


--------------------
Programista PHP
Go to the top of the page
+Quote Post
slaweks
post 19.12.2007, 15:47:18
Post #6





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 19.12.2007

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


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
Go to the top of the page
+Quote Post
MMX3
post 19.12.2007, 15:56:51
Post #7





Grupa: Zarejestrowani
Postów: 155
Pomógł: 9
Dołączył: 26.01.2004
Skąd: Poznań

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


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


--------------------
Go to the top of the page
+Quote Post
Indeo
post 19.12.2007, 22:58:26
Post #8





Grupa: Zarejestrowani
Postów: 295
Pomógł: 7
Dołączył: 26.03.2004
Skąd: Opole

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


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


--------------------
Go to the top of the page
+Quote Post
rygiel
post 20.12.2007, 08:42:56
Post #9





Grupa: Zarejestrowani
Postów: 17
Pomógł: 1
Dołączył: 26.11.2007
Skąd: Łódź

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


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ć.

Ten post edytował rygiel 20.12.2007, 08:43:36


--------------------
Programista PHP
Go to the top of the page
+Quote Post
slaweks
post 20.12.2007, 09:10:02
Post #10





Grupa: Zarejestrowani
Postów: 35
Pomógł: 0
Dołączył: 19.12.2007

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


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
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: 19.07.2025 - 09:46