Wątek zablokowany 2014-10-17 09:01 przez dzek69.

Losowe dobieranie osób w pary

0

Witam, zastanawiam się jak zrobić skrypt, który będzie wybierać dwie losowe osoby i łączyć je w pary. Mam koncept, polegający na tym, że, osoba która podłącza się pod stronę jest zapisywana w bazie danych, tzn. jej IP (ale teraz jest problem, z sieciami w których jest kilka komputerów, więc wpisywanie po IP do bazy nie ma sensu), no i dodanie do bazy danych 0 - jest niewidoczna, klika ta osoba sobie na np. przycisk wyszukaj, no i skrypt ustawia ją na 1 - jest dostępna, sprawdza czy ktoś jest także dostępny w bazie i jeśli jest, to tworzy od razu tabelę w bazie, do zapisu rozmowy itd., ze zbudowaniem bazy do rozmowy to tam dam sobie radę, tyle, że zastanawia mnie jak zrobić właśnie losowanie przypadkowej osoby, poprzez jaki parametr te osoby zapisywać, bo jak jest podsieć i w niej komputery, to przez IP nie ma sensu. Ktoś ma jakiś pomysł? Wybaczcie, za taki mentlik, ale jeśli coś nie jest jasne, to wytłumaczę :)

ps. Wszyscy są gośćmi bez kont.

0

Ale sesja jest unikalna ;) Do zastosowań czatowych bez logowania jest ok.
Sesję tak czy tak musisz otworzyć, więc wykorzystaj jej ID.

Wybranie osoby - najpierw wybierz dostępne osoby (potwierdzą chęć udziału w rozmowie), które nie prowadzą aktualnie rozmowy - potem posortuj je losowo, czyli np:
SELECT * FROM osoby WHERE chce_rozmawiac=1 AND rozmawia=0 ORDER BY RAND() (stosowanie ORDER BY RAND() powinno być na jak najmniejszej liczbie elementów, bo jest powolne, ale zakładając, że będziesz miał 5k użytkowników online - i tak będzie szybkie. Użytkowników, którzy na stronie nie przebywają usuwaj z tej tabeli całkiem

0
dzek69 napisał(a):

Czyli po prostu dodawać mu ID na stronie? Kurde, w sumie racja, dodaję nowe ID i tyle, a użytkowników nie będę usuwać całkiem, bo w przypadku rozwiązań prawnych chcę pod dane IP mieć przyporządkowane rozmowy itd. wybiegam w przyszłość, ale kiedyś to się może przydać. Po prostu będę danemu ID ustawiać 0 - niedostępny, gdy wyjdzie z rozmowy, a gdy będzie niedostępny, czas sesji sam to załatwi.
Czyli tak, wchodzę na stronę, sprawdzam, czy mam zapisaną sesję na komputerze, klikam na "Wyszukaj", ustawiam 1, wrzucam do stosu osób dostępnych i sobie biorę kogoś, a tutaj nasuwa mi się myśl, czy jest możliwe, że w tym samym momencie gdy ja wybiorę kogoś, ktoś mnie wybierze i się jakby miniemy? Czy jest to możliwe?

A i jeszcze jedno pytanko, bo z każdą nową rozmową będę tworzyć nową tabelę dla wiadomości, to baza będzie szybko nabiegać na wielkości, od czego będzie zależeć wydajność takiej bazy?

0

Uhm. Wiesz co? Pierwsze to ja radziłbym SPORO się poduczyć, zanim zaczniesz pisać taki portal. Naprawdę będzie szkoda jak Ci byle gimnazjalista wyłoży serwis - masz jeszcze duże braki w pojęciu jak ma w ogóle funkcjonować baza danych, chyba nie do końca wiesz co to sesja. Nie odbierz mojego postu jako ataku, tylko dobrą radę od kogoś, kto też miewał ambitne pomysły zbyt wcześnie ;]

0
dzek69 napisał(a):

Co to sesja to wiem, może po prostu napisałem to tak pokracznie :D Wiem, wiem, mam wiedzę byle jaką, jeśli chodzi właśnie o zabezpieczenie tego, ale pewnych rzeczy nie można odkładać, bo ktoś Cię ubiegnie i co wtedy? Możesz coś polecić jeśli chodzi o takie zagadnienia, związane z bazą danych?

0

mogę polecić tylko google, bo sam (słowo klucz - samodzielność) uczyłem się z głównie materiałów znalezionych w necie

czaty z losowymi osobami istnieją od lat, także konkurencja już dawno coś takiego wymyśliła i ty możesz tylko kopiować - więc lepiej odpal coś, co porządnie działa i oferuje więcej niż konkurencja - niż startuj z klonem, który posypie Ci się jak domek z kart i stracisz wizerunkowo już na początku

0
dzek69 napisał(a):

no właśnie nie chodzi mi o zbudowanie takiej strony, to jest tylko jakby moduł, a sens strony jest całkiem inny :)

0

A ten czat będzie pisany w php + AJAX czy może w jakimś innym języku w w PHP nie zrobisz samego czatu no chyba, że strona miała by ci się odswieżać co 0.5 sekundy, no ort!, że strona miała by się odswieżać co 0,5 sekundy to byś mógł użyć znacznika <frame> i tylko w jednym <frame> odpowiedzialnym za pokazywanie rekordów w bazie danych odświeżać co 0.5 sekundy.

0

@tomi0001: google "comet"

0
tomi0001 napisał(a):

to jak będzie to działać to ja to zrobię php+ajax, mam już koncept i na pojedynczej rozmowie działa, jedynie co, to wrzucić to pod szukajkę itd.

0

Tylko proszę ciebie, nie rób takiego głupstwa jak osobne tabele dla osobnych rozmów. Przecież tu starczy jedna tabelka

messages {
int id;
int conversation;
int user1_id;
int user2_id;
int time;
string message;
}

0
mr_jaro napisał(a):

Kurde, jak mi to dzek69 napisał, to od razu pomyślałem, że przecież np. forum nie tworzy osobnych tabel do każdego nowego tematu, ale później też pomyślałem, że kurde, jeśli zrobię jedną tabelę, to będę musiał zrobić osobny kontener do niej? Bo przecież w samym messages nie dam rady (chyba), wpakować wszystkich wiadomości wszystkich użytkowników.

0

Że co? patrz na tę mój schemat tabelki co ci podałem każdy kolejny rekord to jedna wiadomość, masz id wiadomości, masz id rozmowy, id userów czas dodania i wiadomość nic więcej ci do szczęścia nie potrzeba. I nie martw się nie nastąpi coś takiego jak przepełnienie. Osobiście już widziałem tabele mające kilkadziesiąt tysi rekordów i wydajność nie spadła, a tabelki wciąż rosną ;) Proponuje na prawdę dokształcić sie w budowaniu baz danych, bo z taką wiedzą daleko nie zajedziesz.

0
mr_jaro napisał(a):

kurde nie zauważyłem int conversation, no i teraz to ma sens, czyli skrypt najpierw sprawdza, czy jest jakiś wolny pokój do chatowania, jeśli nie ma, sam tworzy pokój i czekamy na kogoś, aż się podepnie, bo bez tego, każdy by sobie tworzył nową rozmowę i nikt by się nie znalazł! Dzięki wielkie :D fakt, jestem głąbem i pisząc to chcę się też uczyć :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1