Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Połączenie "userów" w pary.
Forum PHP.pl > Forum > Przedszkole
b4x
Witam, mam pytanie, jak można "połączyć" użytkowników w pary.

Powiedzmy mam 10 osób zalogowanych online.

Chcę każdą z nich połączyć w "dwójki" randomowo dobierając drugą osobę ;-)

Wchodzą wszyscy jednocześnie np. na wybierz.php - i oczekują na odpowiedź (np. za pomocą ajax'a.)

Wie może ktoś jak do tego się zabrać? smile.gif
erix
Ok, ale jak masz tych userów reprezentowanych? Rekord w DB? Pliki? Sam zapis user1:user2?
b4x
Cytat(erix @ 6.04.2009, 20:14:14 ) *
Ok, ale jak masz tych userów reprezentowanych? Rekord w DB? Pliki? Sam zapis user1:user2?




Nie no normalnie w bazie mam użytkowników

id | login | haslo | mail | last_action

- ze strukturą nie ma problemu - zawsze mogę coś dodać.
Spawnm
albo nowa tablica para
id |user1 |user2

albo w istniejącej dodać pole para i tam wpisać id/nick osoby nr2
b4x
@Spawnm - mi chodzi jak to 'wylosować', nie losując już osób w parach.

- Na starcie nikt nie ma pary. winksmiley.jpg


Może "jaśniej" to opiszę.

1. Użytkownik wchodzi sobie na wybierz.php.
2. W pliku wybierz.php ma mu "wylosować" drugą osobę do pary, z tych wszystkich które są aktualnie na wybierz.php, i nie posiadają pary.
3. Jednego z drugim ma połączyć - i poinformować obojga.
kantek
Może tak w tablicy oczywiście twoje id

Tablice sobie mieszasz (losowo się układają elementy) i
układasz w pary 1z2, 3z4 itd.

  1. <?php
  2. $tab = array(1,2,3,15,21,31,41,55,100,200);
  3. shuffle($tab);
  4.  
  5. foreach($tab as $var){
  6.    if($i++ % 2 == 0){
  7.        echo "<br />para  : ";
  8.    }
  9.    echo $var.' , ';
  10. }
  11. ?>



Pozdrawiam
erix
Cytat
- ze strukturą nie ma problemu - zawsze mogę coś dodać.

Najprościej byłoby chyba zrobić coś takiego: dodajesz kolumnę pair, która by zawierała info o drugim użytkowniku ("na krzyż") i przy wybieraniu sprawdzasz, czy ta kolumna jest pusta.

Choć dużo bardziej eleganckim (relacyjnym) rozwiązaniem byłoby IMHO rozdzielenie tego na osobną tabelę z powiązaniami.
b4x
Zrobiłem na razie tabelę `queue`:

id | UserID | ConnectedTo | PairID | Status |

1 | VKodK | vtEKvotEorvre | VrmvetASN | 2
2 | vtEKvotEorvre | VKodK | VrmvetASN | 2


Przy wejściu na wybierz.php dodaje użytkownika do kolejki, szukam mu osoby do rozmowy, po załadowaniu strony (SELECT * FROM `queue` WHERE `UserID` = "'.$UserID.'" AND `Status` = "1"')

jeśli nie znalazło, odpytuje ajaxem - do czasu znalezienia drugiej osoby.

Po znalezieniu

  1. <?php
  2. mysql_query ('UPDATE `queue` SET `ConnectedTo` = "'.$this->escape($ConnectedTo).'", `PairID` = "'.$this->escape($PairID).'", `Status` = "2" WHERE `UserID` = "'.$this->escape($UserID).'"');
  3.        mysql_query ('UPDATE `queue` SET `ConnectedTo` = "'.$this->escape($UserID).'", `PairID` = "'.$this->escape($PairID).'", `Status` = "2" WHERE `UserID` = "'.$this->escape($ConnectedTo).'"');
  4. ?>


Początkowo: ConnectedTo | PairID - jest puste.

Jest to dobrym rozwiązaniem ;-) ?
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.