Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP] Funkcja losująca
Xart
post 24.04.2014, 15:10:43
Post #1





Grupa: Zarejestrowani
Postów: 267
Pomógł: 6
Dołączył: 8.04.2013

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


Witam piszę sobie dla nauki pewne skrypty ostatnio i jak czegoś nie wiem to pytam biggrin.gif
Mam do was prośbę abyście odesłali mnie do jakiś źródeł jak zrobić pewien system ("losowania/przydzielania")

Dokładniej

Mam w bazie danych tabele zawodnicy

// id // imie i nazwisko // klub //

i np:

1 // Wacał Markowski // Wojownik Elbląg
itd...


Załóżmy, że mam 16 zawodników i skrypt ma losowo dobrać ich w prawy, z tym że musza być z innego klubu i to jest pierwsza runda. Potem skrypt z pozostałych 8 losuje między sobą z tym że jeżeli istnieje taka możliwość muszą być z różnych klubów i tak dalej aż do półfinału...

Jakich funkcji użyć ?
Może jakieś podpowiedzi / części kodu ?
Może link do manuala

Będę wdzięczny za każdą pomoc smile.gif
Go to the top of the page
+Quote Post
nospor
post 24.04.2014, 15:14:40
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Losujesz pierwszego, potem dla niego szukasz drugiego z innego klubu.
Potem losujesz znowu jednego i dla niego drugiego z innego klubu.
itd

Gdy w danym losowaniu nie bedzie kolesia z innnego klubu, to wowczas losujesz z jego klubu



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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Xart
post 24.04.2014, 15:17:29
Post #3





Grupa: Zarejestrowani
Postów: 267
Pomógł: 6
Dołączył: 8.04.2013

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


@UP

Dzięki za podpowiedź takie rozwiązanie jest dobre bo czy będę miał 30 czy 10 to się sprawdzi

Oczywiście jeżeli liczba jest nie parzysta to przechodzi bez walki itd.

I to sobię zrobie na if'ach ale jakiej funkcji użyć do losowania ?
Byłbym wdzięczny bardzo za jakieś przykładowe kawałki kodu wink.gif
Go to the top of the page
+Quote Post
nospor
post 24.04.2014, 15:18:53
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




jesli robic bedziesz w bazie to
...order by rand()
Przy tak malej liczbie rekordow jest to wystarczajace rozwiązanie


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Xart
post 24.04.2014, 15:21:20
Post #5





Grupa: Zarejestrowani
Postów: 267
Pomógł: 6
Dołączył: 8.04.2013

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


@UP
Wolałbym zrobić to jednak na innej zasadzie.

Pobieram dane z bazy do tablicy.
Wybieram pierwszego zawodnika z listy i losuję do niego z innym klubem -> Jak to napisać ?
Go to the top of the page
+Quote Post
nospor
post 24.04.2014, 15:22:42
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Co ty z tym UPem? Przeciez wiem ze z dolem nie gadasz...

W bazie mozesz zrobic warunki w zapytaniu. Robiąc to na tablicy w php bedziesz musial latac i sprawdzac wszystko pokolei


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Xart
post 24.04.2014, 15:24:53
Post #7





Grupa: Zarejestrowani
Postów: 267
Pomógł: 6
Dołączył: 8.04.2013

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


A mógłbyś podać jakiś konkretny przykład bo właśnie ja widzę tylko taką moetodę po kolei...
Go to the top of the page
+Quote Post
nospor
post 24.04.2014, 15:26:07
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie bardzo rozumiem w czym problem. Napisalem ci krok po kroku co masz robic. Podalem ci jak sie losuje w mysql. Jaki masz konkretnie problem?


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Xart
post 24.04.2014, 15:29:06
Post #9





Grupa: Zarejestrowani
Postów: 267
Pomógł: 6
Dołączył: 8.04.2013

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


Podałeś mi tylko metodę sortowania wyników z bazy danych...

order by rand()

i to rozumiem ale do tego warunku nie da się dopisać że nie mogę być z 1 drużyny...
Go to the top of the page
+Quote Post
nospor
post 24.04.2014, 15:30:30
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No juz takie podstawy jak
....WHERE ID_DRUZYNY<>ID_DRuZYNY_KOLESIA_DLA_KTOREGO_SZUKASZ
juz sobie darowalem. Sadzilem ze umiesz korzystac z WHERE w zapytaniach...


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Xart
post 24.04.2014, 15:33:00
Post #11





Grupa: Zarejestrowani
Postów: 267
Pomógł: 6
Dołączył: 8.04.2013

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


Ale takim sposobem dla każdego kolesia muszę szukać odzielnie... a ja nie będę miał stałej liczby tylko np będę musiał dopisać 10 zawodników to 10 będę musiał dorobić 10 zapytań ...
Nie ma jakiegoś innego sposobu >
Go to the top of the page
+Quote Post
nospor
post 24.04.2014, 15:35:22
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Ale takim sposobem dla każdego kolesia muszę szukać odzielnie
No tak. Dokladnie to wynikalo z psedokodu jaki ci podalem.


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Xart
post 24.04.2014, 16:21:56
Post #13





Grupa: Zarejestrowani
Postów: 267
Pomógł: 6
Dołączył: 8.04.2013

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


Mógłby ktoś napisać mi jakiś przykład w PHP ?


Próbowałem to zrobić ale coś mi nie wyszło...



  1. <table>
  2. <?php
  3. include('inc/config.php');
  4. $zapytanie = $mysqli->query("SELECT * FROM `zawodnicy` order by id");
  5. $wynik = $zapytanie->fetch_assoc();
  6. for ($i=1; $i>=8; $i=$i+2;){
  7. $zapytanie1 = $mysqli->query("SELECT * FROM `zawodnicy` WHERE `id` = '$i'");
  8. $wynik1 = $zapytanie1->fetch_assoc();
  9. $druzyna = $wynik1['druzyna'];
  10. $zapytanie2 = $mysqli->query("SELECT * FROM `zawodnicy` WHERE `id` = '$i++' AND `druzyna` != '$druzyna'");
  11. $wynik2 = $zapytanie2->fetch_assoc();
  12. echo $wynik1['nazwa'] $wynik2['nazwa'];
  13. echo '<br>';
  14. }
  15. ?>
  16. </table>


Niestety nie działa i chyba nie za bardzo ma prawo działać...
Go to the top of the page
+Quote Post
Turson
post 24.04.2014, 16:33:36
Post #14





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


  1. $zapytanie = $mysqli->query("SELECT * FROM `zawodnicy` order by id");
  2. $wynik = $zapytanie->fetch_assoc();
  3. for ($i=1; $i>=8; $i=$i+2;){
  4. $zapytanie1 = $mysqli->query("SELECT * FROM `zawodnicy` WHERE `id` = '$i'");

Po co pobrałeś rekordy jeśli z nich nie korzystasz :/

$result1 = pobierz wszystkich zawodnikow
foreach($result1 as $v){
$result2 = pobierz zawodnika gdzie drużyna!=$v[druzyna]
para: $v[imie] $result2[imie]
}
Go to the top of the page
+Quote Post
Xart
post 24.04.2014, 16:42:12
Post #15





Grupa: Zarejestrowani
Postów: 267
Pomógł: 6
Dołączył: 8.04.2013

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


Dzięki wielkie ale coś nadal mi nie działa....

  1. <?php
  2. include('inc/config.php');
  3. $result1 = $mysqli->query("SELECT * FROM `zawodnicy` ORDER BY id");
  4. foreach($result1 as $v){
  5. $result2 = $mysqli->query("SELECT * FROM `zawodnicy` WHERE `druzyna` != $v['druzyna']");
  6. echo("."$v['nazwa']." vs ."$result2['nazwa']."");
  7. }
  8. ?>


Ten post edytował Xart 24.04.2014, 16:43:06
Go to the top of the page
+Quote Post
Turson
post 24.04.2014, 16:43:09
Post #16





Grupa: Zarejestrowani
Postów: 4 291
Pomógł: 829
Dołączył: 14.02.2009
Skąd: łódź

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


gdzie jest fetch_assoc? a w drugim fetch row

Ten post edytował Turson 24.04.2014, 16:43:46
Go to the top of the page
+Quote Post
Xart
post 24.04.2014, 17:56:40
Post #17





Grupa: Zarejestrowani
Postów: 267
Pomógł: 6
Dołączył: 8.04.2013

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


Fakt ...

Poprawiłem i wyświetla ale nie tak jak chce ;/

  1. <?php
  2. include('inc/config.php');
  3. $result1 = $mysqli->query("SELECT * FROM `zawodnicy` order by id");
  4. foreach($result1 as $v){
  5. $i = $v['druzyna'];
  6. $result2 = $mysqli->query("SELECT * FROM `zawodnicy` WHERE `druzyna` != '$i' ");
  7. $wynik2 = $result2->fetch_assoc();
  8. echo $v['nazwa'];
  9. echo ' vs ';
  10. echo $wynik2['nazwa'];
  11. echo '<br>';
  12. }
  13. ?>


Łukasz vs Rafał
Rafał vs Łukasz
Dominik vs Rafał
Kuba vs Łukasz
Diana vs Rafał
Krystian vs Łukasz
Marian vs Łukasz
Szuh vs Rafał

Każdy zawodnik może walczyć z każdym tylko jeden raz i ma to być dobrane losowo a nie wszystkie kombinacje

Czyli jak masz np 8 zawodników to powinny wylosować się 4 walki
np numery
1-4
5-8
2-3
6-7
albo
1-3
2-4
5-7
6-8

ITP a nie tutaj każdy walczy z każdy...
;/

Oczywiście ma to być poprostu losowanie...
Dowolnie ma wylosować zawodników do siebie i tyle aby nie byli w tej samej drużynie chyba że nie ma innej możliwości

Ten post edytował Xart 24.04.2014, 17:56:59
Go to the top of the page
+Quote Post
nospor
post 24.04.2014, 17:58:32
Post #18





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Napisalem ci jak to zrobic.Czemu nie zrobisz jak napisalem?


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Xart
post 24.04.2014, 18:19:36
Post #19





Grupa: Zarejestrowani
Postów: 267
Pomógł: 6
Dołączył: 8.04.2013

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


Bo nie rozumiem tego co napisałeś - jak ty byś chciał to sprawdzać i kompletnie nie wiem jak zacząć. Mógłbyś mi to opisać krok po kroku z fragmentami kodu ? Byłbym bardzo wdzieczny nie zalezy mi zbytnio na czasie ale analizujac ten kod bym sie nauczył. Sory za błędy - tele
Go to the top of the page
+Quote Post
nospor
post 24.04.2014, 18:26:21
Post #20





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Masz napisane:
"Losujesz pierwszego, potem dla niego szukasz drugiego z innego klubu."
Czego tu nie rozumiesz?
Masz napisac zapytanie, ktore wylosuje ci jednego uzytkownika. Potem masz napisac zapytanie, ktore wylosuje tez jednego uzytkownika, ale z innego klubu.
Wszelkie niezbedne informacje jak to sie robi napisalem ci.
Operacje te powtarzasz tyle razy ile razy cchesz miec par.

Oczywiscie w kazdym zapytaniu musi sie znalezc warunek, by nie losowal wylosowanych juz userow. Ale to jest proste, bo wylosowanych userow bedziesz zapisywal w tablicy php a potem do kazdego zapytania przekazywal ID wylosowanych userow by nie bral ich pod uwage


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

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 5.07.2025 - 13:35