[MySQL][PHP]Jak to jest zrobione?, użytkownicy którzy odwiedzili twój profil... |
[MySQL][PHP]Jak to jest zrobione?, użytkownicy którzy odwiedzili twój profil... |
5.09.2009, 22:39:18
Post
#1
|
|
Grupa: Zarejestrowani Postów: 44 Pomógł: 0 Dołączył: 11.11.2007 Ostrzeżenie: (0%) |
Tak się zastanawiam jak wygląda konstrukcja zapisu do bazy użytkowników którzy czytali moje artykuły, odwiedzili moją stronę lub oglądali mój profil? Dla jasności dodam, że chodzi mi o np. wykaz 100 ostatnich użytkowników którzy oglądali mój profil, jak coś takiego zrobić?
|
|
|
6.09.2009, 04:37:36
Post
#2
|
|
Grupa: Zarejestrowani Postów: 379 Pomógł: 45 Dołączył: 30.06.2007 Ostrzeżenie: (10%) |
Tworzysz sobie tabelę w bazie z ID użytkownikami, do tej tabeli dodajesz np. ID artykułu, który ten użytkownik czytał. Możesz sobie wtedy dodawać datę i godzinę.
W PHP przy pomocy grupowania konkretnego ID możesz wyświetlić ile chcesz osób, które czytały dany artykuł, o której godzinie i którego dnia. Dla profili robisz analogicznie. -------------------- Jeśli Ci pomogłem kliknij "Pomógł"
Jeśli Ty mi pomogłeś kliknę "Pomógł" |
|
|
6.09.2009, 09:57:27
Post
#3
|
|
Grupa: Zarejestrowani Postów: 195 Pomógł: 18 Dołączył: 7.10.2007 Ostrzeżenie: (0%) |
Dodajesz w bazie
Cytat co_odwiedzil|kto_odwiedzil|kiedy_odwiedzil Przy wyświetlaniu strony uzupełniasz to. Chyba nie trzeba tłumaczyć co gdzie wpisać. Później wyciągasz te dane limitując sobie jakoś. |
|
|
6.09.2009, 13:26:27
Post
#4
|
|
Grupa: Zarejestrowani Postów: 44 Pomógł: 0 Dołączył: 11.11.2007 Ostrzeżenie: (0%) |
Dziękuję za odpowiedzi, miałem nadzieję że jest to możliwe bez tworzenia nowej tabeli, tj nadpisując rekord z id użytkowników, tylko głowiłem się jak ograniczyć jego "pojemność" do określonej ilości. Tzn aby nadpisując nowe, usuwało te najstarsze. Skoro trzeba utworzyć nową tabelę i w niej zapisywać użytkowników odwiedzających to teraz zastanawiam się jak skonstruować zapytanie aby wyciągało id nie dublujące się w danym dniu? Jeśli X odwiedził mnie dziś 20 razy to aby wyświetliło tylko ten ostatni i o ile skorzystać mogę z DISTINCT aby to osiągnąć to czy da się tak skonstruować zapytanie aby DISTINCT odnosiło się do jednego dnia, wyszukując tych dni np 30?
Jako że być może mało zrozumiale się wypowiadam zobrazuje na przykładzie: - dzisiaj X odwiedził mnie 5 razy, - wczoraj X odwiedził mnie 3 razy, - przedwczoraj X odwiedził mnie 7 razy - itd z co najmniej kilkoma odwiedzinami w jednym dniu Da się za pomocą jednego zapytania wyciągnąć id użytkowników bez dublowania ich w kolejnych dniach? |
|
|
6.09.2009, 14:38:01
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) |
GROUP BY
|
|
|
7.09.2009, 17:23:36
Post
#6
|
|
Grupa: Zarejestrowani Postów: 44 Pomógł: 0 Dołączył: 11.11.2007 Ostrzeżenie: (0%) |
Pobieram id użytkownika i datę aktualizacji rekordu:
Zapisuje pobrane dane do tablicy dwuwymiarowej:
Uzyskałem dzięki temu tablicę w której numerowi id użytkownika przypisana jest data aktualizacji rekordu i wygląda to tak: Cytat Array ( [441] => 2009-09-06 23:22:34 [439] => 2009-09-07 17:52:10 ) Jak teraz pobrać dane użytkownika z innej tabeli na podstawie id które zapisałem w tablicy? I czy oby ja nie idę jakoś na około?? W wyniku chciałbym uzyskać dane użytkownika (kto_id) i datę kiedy mnie odwiedził (kiedy). |
|
|
7.09.2009, 21:06:28
Post
#7
|
|
Grupa: Zarejestrowani Postów: 178 Pomógł: 8 Dołączył: 19.03.2007 Ostrzeżenie: (0%) |
jest na przemo takowa modyfikacja, pobierz i analizuj.
|
|
|
7.09.2009, 22:25:55
Post
#8
|
|
Grupa: Zarejestrowani Postów: 44 Pomógł: 0 Dołączył: 11.11.2007 Ostrzeżenie: (0%) |
Znalazłem tą modyfikację a w niej:
jak dla mnie to...chińszczyzna, za cieńki jestem Z tego co widzę zapytanie jest do dwóch tabel jednocześnie i wlaśnie o to mi chodziło, a mianowicie jak wyszukać w tabeli nr 2 wedle wyniku z kryteriów wyszukiwania w tabeli nr 1? Wcześniej znalazłem coś takiego:
i po tym zorientowałem się że da się to osiągnąć w jednym zapytaniu, tylko nie wiem jaka ma być składnia tego zapytania? Mózg mi się zapalił I wymyśliłem coś takiego:
i zaraz zabieram się do sprawdzania jak to zadziała. Pytanie czy da się tutaj zastosować DISTINCT aby nie wyświetlało zdublowanych użytkowników? Ten post edytował kosma 7.09.2009, 22:52:38 |
|
|
7.09.2009, 23:34:24
Post
#9
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 15 Dołączył: 17.08.2009 Ostrzeżenie: (0%) |
|
|
|
8.09.2009, 02:05:17
Post
#10
|
|
Grupa: Zarejestrowani Postów: 44 Pomógł: 0 Dołączył: 11.11.2007 Ostrzeżenie: (0%) |
Dzięki CyberDuck_ za nakierowanie bo choć pamiętałem o GROUP BY to zamierzałem po nie sięgnąć tj. zgłębić działanie tej dyrektywy troszkę później.
Nie mniej naprostowałeś mnie i wyszło mi teraz coś takiego:
Zapytanie troszkę inaczej wygląda niż poprzednie ponieważ w międzyczasie naszła mnie myśl aby zmienić tak jak mam w tabeli pw i zmieniłem: Cytat kto_id => nadawca kogo_id => odbiorca kiedy => data_nadania co pozwoliło mi powyższe zapytanie zastosować też do PW (wiadomości) i teraz jednym kliknięciem mam kto mnie odwiedził albo kogo ja odwiedzałem jak i też kto do mnie pisał lub też do kogo ja pisałem. Tylko jakoś takie karkołomne to zapytanie jak na moje amatorskie oko, a co dziwne działa!!!! |
|
|
8.09.2009, 09:22:26
Post
#11
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 15 Dołączył: 17.08.2009 Ostrzeżenie: (0%) |
Jak rozwiazesz dane tak bedzie ...
Ja to troszke na jednej ze stron inaczej zrobilem. Zazwyczaj do tabeli uzytkownikow dodaje sie jakis sposob numerowania. Moze to byc ID uzytkownika. Jesli odwiedza sie czyjs profil to jest zawsze znane ID tego uzytkownika w skrypcie. Wystarczy dodac pole do tabeli np 'odwiedzane' jako text i odpowiednio zorganizowac sobie dane zapisywane. Mozna kolejne wpisy oddzielac znakiem ':' . W ten sposob kolejne zapisy beda wygladaly tak ':223:345:234783:233423:'. Zeby sie dowiedziec kto mnie odwiedzal wystarczy zadac pytanie : $ja = ':345:'; Jesli chcesz dodac do tego date odwiedzania to tez nie ma problemu bo wystarczy jesli rozroznisz rekordy np literka : ':223:d123234234213:345:d3345435456456:234783:d2342313223:233423:d9872983748:'. Spojrz na zalety takiego rozwiazania. Zeby sie dowiedziec czegokolwiek o odwiedzinach wystarczy zadac jedno pytanie. Zeby sprawdzic czy juz byl zapis o tym ID tez nie potrzeba zadnej petli. Kompresja danych jest dosc znaczna bo rekordy sa umieszczone w jednym polu. Na innej ze stron zrobilem podobnie jak Ty, ale dla odwiedzin zrobilem zupelnie osobna tabele. Jak sobie rozwiazesz tak bedziesz miec. Ogolnie staraj sie zawsze tak konstruowac sobie dane zeby zadawac do bazy danych pozniej jak najmniej pytan przy przegladaniu strony. Rzadziej sie zapisuje dane do bazy danych niz odczytuje i to ma znaczenie przy duzej ilosci odwiedzin. Hehe na pierwszej stronie jaka pisalem to bylo okolo 21 zapytan przy generowaniu calej strony. Z mala strona serwer sobie poradzi, ale jesli zacznie przybywac odwiedzin zaczyna sie robic masakra. Dzisiaj to jest na cala strone max 7 zapytan przy czym na stronach sa tabele poczty, profili, wlasnych ustawien, odwiedzin, itd ... |
|
|
8.09.2009, 12:53:16
Post
#12
|
|
Grupa: Zarejestrowani Postów: 44 Pomógł: 0 Dołączył: 11.11.2007 Ostrzeżenie: (0%) |
Dziękuję CyberDuck_ za obszerną wypowiedź i wskazówki. Ja nie znam się na budowaniu stron i jak widać raczkuję w tym temacie, zapewne nie będzie to ma profesja, a jedynie hobby. Również staram się unikać zapytań jak tylko mogę i już w trakcie budowy czasem mi tych zapytań ubywa, bo i co dnia inaczej to wszystko widzę i choć mało to jednak więcej już wiem niż wiedziałem. Zastanawia mnie jednak czy oby zwiększanie wydajności w ograniczaniu zapytań ma sens, jeśli przy tym samym przybywa mi zmiennych, gdyż dane których potrzeba czerpię nie z zapytania, a z sesji w której je przechowuję. A u mnie właśnie tych zapytań ubyło odkąd nauczyłem się zapisywać zmienne w sesjach, zwłaszcza w tablicach dwuwymiarowych.
|
|
|
8.09.2009, 13:08:03
Post
#13
|
|
Grupa: Zarejestrowani Postów: 135 Pomógł: 15 Dołączył: 17.08.2009 Ostrzeżenie: (0%) |
Ma sens. Przy kazdym zapytaniu do bazy danych
jest wywolywany bardzo skomplikowany skrypt i sam program bazy danych, a procz tego wszystko jest czytane z dysku bo baza danych tak na prawde jest zapisywana w postaci plikow na dysku serwera. Podobnie jest z sesjami, albo zmiennymi. Zmienne trafiaja do pamieci, a jesli ta juz jest zapchana to trafia to do pamieci podrecznej swap. Przy sesjach wszystkie zmienne sa zapisywane na dysku, ale obsluguje je sam interpreter php. Iloscia zmiennych nie musisz sie przejmowac. Kiedys mialem starszy skrypt forum przema, a to wyciska z serwera ostatnie poty. W tym starszym skrypcie do bazy bylo zadawanych okolo 30 .. nawet do 40 zapytan do bazy. Mialem wtedy spore problemy z forami na hostach, ktore odkupowalem od innych. Dzisiaj nie ma takich problemow poniewaz to samo forum zadaje tylko max 9 zapytan do bazy. Przy zwiekszonej ilosci uzytkownikow mimo to spadl load na serwerze. Nie martw sie, ze sie dopiero uczysz. Jak sobie wymyslisz skrypty i organizacje danych tak bedziesz mial. Wazne zeby dzialalo, a sposoby rozwiazan przyjda same z czasem. Ja tez sie nie uwazam za guru w tych sprawach, ale staram sie cos niecos podpowiedziec. |
|
|
8.09.2009, 13:22:44
Post
#14
|
|
Grupa: Moderatorzy Postów: 6 070 Pomógł: 860 Dołączył: 10.12.2003 Skąd: Dąbrowa Górnicza |
Wystarczy dodac pole do tabeli np 'odwiedzane' jako text i odpowiednio zorganizowac sobie dane zapisywane. Mozna kolejne wpisy oddzielac znakiem ':' . W ten sposob kolejne zapisy beda wygladaly tak ':223:345:234783:233423:'. Zeby sie dowiedziec kto mnie odwiedzal wystarczy zadac pytanie : $ja = ':345:'; Jesli chcesz dodac do tego date odwiedzania to tez nie ma problemu bo wystarczy jesli rozroznisz rekordy np literka : ':223:d123234234213:345:d3345435456456:234783:d2342313223:233423:d9872983748:'. Co za brednie! Ile ten serwis ma odwiedzin? 3 na dobę? Piszesz o "zaletach" (kwestia sporna) tego rozwiązania. Ok, super, jesteś nim podniecony. Ale poproszę o podanie listy użytkowników (loginy), który odwiedzili mój profil - już zaczniesz się ksztusić. No to dalej: ograniczamy tą listę do ostatnich 60 minut. Potem jeszcze chciałbym wykaz kto odwiedził i ile razy w przeciągu ostatnich 60 minut. Człowieku: to co piszesz to totalna amatorszczyzna, nie masz podstaw w projektowaniu baz danych/systemów. Sugeruję zapoznanie się z pojęciem normalizacji baz danych, a także wydajności klauzuli LIKE (w szczególności z obustronnym %). Ciekaw jestem tylko, czy za wspominany serwis ktoś ci zapłacił... |
|
|
Wersja Lo-Fi | Aktualny czas: 28.04.2024 - 14:14 |