Ocena wątku:
- 0 głosów - średnia: 0
- 1
- 2
- 3
- 4
- 5
[php+sql] mała pomoc
|
Liczba postów: 341
Liczba wątków: 4
Dołączył: 15-10-2009
Reputacja:
23
Witajcie . Przepraszam , że pisze ale już mózg mam wypalony od myślenia Wink
Otóż piszę sobie takie coś jak przypuśćmy mamy na Facebook , że są posty na tablicy itp itd.
Wszystko się ładnie wczytuję po kliknięciu w "więcej" wczytuje się więcej postów wszystko gra.
Mój problem pojawia się gdy użytkownik doda jakiś post w formularzu , ponieważ nie odświeżam całej listy tylko dodaje na jej początek tego posta. Jednak wtedy po kliknięciu "więcej" ( zależności ile postów użytkownik dodał ) to te posty się dublują. Nie mam pomysłu jak to obejść. A także tego , że inni użytkownicy w tym momencie mogą coś dodać.
Ewentualny kod mogę podać lub coś do tłumaczyć Smile
Cytat:Wyrazić to co czuję , zabrakło by tyle słów....
Liczba postów: 282
Liczba wątków: 12
Dołączył: 06-03-2010
Reputacja:
7
(25-04-2011, 16:28)kancik napisał(a): Witajcie . Przepraszam , że pisze ale już mózg mam wypalony od myślenia Wink
Otóż piszę sobie takie coś jak przypuśćmy mamy na Facebook , że są posty na tablicy itp itd.
Wszystko się ładnie wczytuję po kliknięciu w "więcej" wczytuje się więcej postów wszystko gra.
Mój problem pojawia się gdy użytkownik doda jakiś post w formularzu , ponieważ nie odświeżam całej listy tylko dodaje na jej początek tego posta. Jednak wtedy po kliknięciu "więcej" ( zależności ile postów użytkownik dodał ) to te posty się dublują. Nie mam pomysłu jak to obejść. A także tego , że inni użytkownicy w tym momencie mogą coś dodać.
Ewentualny kod mogę podać lub coś do tłumaczyć Smile Pokaż kod.
Ajax?
PHP i MySQL Tworzenie stron WWW Vademecum profesjonalisty Wydanie 4
- sprzedam po rozsądnej cenie, stan jak nowa.
Carpe Di Em
Liczba postów: 341
Liczba wątków: 4
Dołączył: 15-10-2009
Reputacja:
23
25-04-2011, 17:02
(Ten post był ostatnio modyfikowany: 25-04-2011, 17:07 przez kancik.)
no dobra pokaże Ci ajax ale on najmniej potrzebny bo to chodzi o pobieranie z bay danych i jakoś wykluczenie tych co dodałem.
Kod PHP: // dodanie wpisu function set_status(){ var old = $('#microblog_entries').html(); var old2 = $('#entry_add input[type=submit]').val(); $('#entry_add input[type=submit]').val('...'); $.ajax({ type: "POST", url: "microblog/entries/add", data: $('#entry_add').serialize(), dataType: "json", success: function(json){
$(json['txt']).css('display','none').insertAfter('.microblog_title').delay(400).show('slow'); if ( $('.microblog_not_exist') ) { $('.microblog_not_exist').remove();} $('#entry_add input[type=submit]').val(old2); $('#entry_add textarea[name=entry_body]').val(''); }, error:function(){ alert('blad'); } }); } // pobranie wiecej wpisow
function microblog_get_more(x){
$.ajax({ type:"GET", url: "microblog/entries/show_last/"+x, dataType: "json", success: function(json){ $('.microblog_get_more').remove(); $(json['txt']).css('display','none').delay(0).insertAfter('.microblog_content:last').fadeIn(); }, error: function() { alert( "Wystąpił błąd w połączniu :(");
} });
}
na razie to wyglada prymitywnie bo po co mam coś robić ładniejsze skoro nie spełnia podstawowych założen.
dobra pobieram to jeszcze tak
Kod PHP: return $this -> db -> query("SELECT mb.id,mb.id_user,mb.body,mb.date,u.login FROM ".$this->db->dbprefix."microblog_entries as mb , ".$this->db->dbprefix."users as u WHERE mb.id_user=u.id ORDER BY mb.id DESC LIMIT ".$offset.",20"); // to zapytanie złamałem by sie mniej wiecej miescilo tutaj na forum
niby mógłbym sobie pobrać datę ostatniego dodanego w "locie" wpisu i liczyć te wszystkie wpisy w tabeli do pobrania jako starsze niż ta data. Może i by to było dobrym wyjściem. A jak ktoś by tam dopisał ze znajomych posta to by się pojawiła informacja gdzieś na ekranie , że dodał i wtedy by się odświeżyła lista , żeby już za dużo kombinować.
niby mógłbym sobie pobrać datę ostatniego dodanego w "locie" wpisu i liczyć te wszystkie wpisy w tabeli do pobrania jako starsze niż ta data. Może i by to było dobrym wyjściem. A jak ktoś by tam dopisał ze znajomych posta to by się pojawiła informacja gdzieś na ekranie , że dodał i wtedy by się odświeżyła lista , żeby już za dużo kombinować.
Cytat:Wyrazić to co czuję , zabrakło by tyle słów....
Liczba postów: 2,587
Liczba wątków: 2
Dołączył: 03-04-2010
Reputacja:
58
Mamy tak:
- formularz dodawania - po dodaniu post jest dodawany na początek listy
- klik => więcej - pobieranie z bazy danych.
Ja bym po prostu...ukrywał, po kliknięciu na więcej, posty dodane po dodaniu posta przez użytkownika:
- dodaj w set_status() jakąś klasę
- przed wysłaniem ządania w funkcji microblog_get_more() po prostu usuń te elementy posiadające klasę dodwaną wyżej.
Liczba postów: 341
Liczba wątków: 4
Dołączył: 15-10-2009
Reputacja:
23
Inaczej troszkę zrobiłem bo przemyślałem. Pedro84 dobrze mówisz , jednak wymyśliłem troszkę szybsze rozwiązanie.
Mianowicie zrobiłem tak. Gdy użytkownik dodaje nowego posta to dodaje się to w klasie np. new_added . Następnie w js sprawdzam sobie ( podczas pobierania starszych postów ) czy istnieje taki element ( .new_added ) , jeżeli istnieje to pobieram sobie z ostatniego takiego elementu ( .new_added ukrytą datę i potem to czysta formalność. Działa po testach tak jak należy. Dzięki za pomoc
Cytat:Wyrazić to co czuję , zabrakło by tyle słów....
Liczba postów: 2,587
Liczba wątków: 2
Dołączył: 03-04-2010
Reputacja:
58
(25-04-2011, 17:25)kancik napisał(a): Inaczej troszkę zrobiłem bo przemyślałem. Pedro84 dobrze mówisz , jednak wymyśliłem troszkę szybsze rozwiązanie.
Mianowicie zrobiłem tak. Gdy użytkownik dodaje nowego posta to dodaje się to w klasie np. new_added . Następnie w js sprawdzam sobie ( podczas pobierania starszych postów ) czy istnieje taki element ( .new_added ) , jeżeli istnieje to pobieram sobie z ostatniego takiego elementu ( .new_added ukrytą datę i potem to czysta formalność. Działa po testach tak jak należy. Dzięki za pomoc  Moim zdaniem dość toporne rozwiązanie. Czemu? Zobacz, skoro możesz sobie puścić zwykłe zapytanie, bez jakichkolwiek manipulacji - wyłączająć offset i limit - to ja poszedłbym tą drogą
Liczba postów: 341
Liczba wątków: 4
Dołączył: 15-10-2009
Reputacja:
23
25-04-2011, 19:28
(Ten post był ostatnio modyfikowany: 25-04-2011, 19:29 przez kancik.)
jeszcze jedno
Kod PHP: $zapytanie = ""; $zapytanie = "SELECT mb.id,mb.id_user,mb.body,mb.date, u.login,u.avatar,ob.first,ob.second FROM ".$this->db->dbprefix."microblog_entries as mb, ".$this->db->dbprefix."users as u, ".$this->db->dbprefix."observe as ob WHERE mb.id_user=u.id AND ((ob.first=".$this->session->userdata('id')." AND ob.second=mb.id_user) OR mb.id_user=".$this->session->userdata('id').") "; if ( is_numeric($this->uri->segment(5))) { $zapytanie .= ",mb.date<".$this->uri->segment(5); } $zapytanie .= " ORDER BY mb.id"; // $this->session->userdata('id') - id uzytkownika
chodzi mi tu dokładnie o zapytanie a nie składnie php  mam trzy tabelki w bazie
users ( id , login , avatar itp itd - wymieniam tylko uzyte tu ) .
microblog_entries(id_user,id,body,date),
observe(first,second).
już wyjaśniam. w tabelce observe first to użytkownik który zaczyna obserwować użytkownika second  nie wymyśliłem lepszego algorytmu ;p
z poprzednimi tabelami nie trudno się domyślić o co mi chodzi
Problem jest z zapytaniem które ma pokazywać wpisy tylko obserwowanych userów.
Sytuacja jest taka. Uzytkownik id=3 obserwuje uzytkownika id=4. No i jestem np. zalogowany na uzytkownika 3 i ten widzi swoje posty jako zdublowane. Nie wiem dlaczego
Cytat:Wyrazić to co czuję , zabrakło by tyle słów....
Liczba postów: 2,587
Liczba wątków: 2
Dołączył: 03-04-2010
Reputacja:
58
Zacznijmy od tego, że tabela observe ma trochę skopane nazwy kolumn. Czemu nie dasz np:
Kod: user_id => id użytkownka
followed_id => id użytkownika zalogowanego
Taka techniczna uwaga.
Generalnie, proponowałbym zmianę struktury tabel na coś takiego:
Kod: microblog_entries( id, user_id, body, date) // user_id zamiast id_user
observe(user_id, followed_id)
Druga sprawa, to Twoje zapytanie. Kiedy masz jesteś zalogowany jako ID 3, żeby pobrać wszystkie posty użytkownika obserwowanego (w tym przypadku ID 4), robisz coś takiego:
Kod: SELECT *
FROM `observe` AS `ob`
JOIN `microblog_entries` AS `mb`
ON `mb`.`user_id` = `ob`.`followed_id`
WHERE `ob`.`followed_id` = '4'
/*
* followed_id - wspomniane wcześniej ID usera obserwowanego
* mb.user_id - ID autora wpisu
*/
dalej możesz sobie manipulować zapytaniem jak chcesz. Zapytanie zwróci Ci wszystkie posty użytkownika ID 4.
|
Podobne wątki… |
Wątek: |
Autor |
Odpowiedzi: |
Wyświetleń: |
Ostatni post |
|
pomoc w złączeniu MySQL |
puciol |
1 |
1,962 |
16-06-2012, 20:10
Ostatni post: Pedro84
|
|
Pomoc przy kodzie php |
adamk342 |
4 |
3,366 |
07-05-2012, 17:28
Ostatni post: adamk342
|
|
POMOC! Problem programistyczny. |
J0hny |
1 |
2,009 |
10-10-2011, 16:54
Ostatni post: Pedro84
|
|
Pomoc dla żółtodzioba |
verde |
5 |
4,832 |
12-07-2011, 17:27
Ostatni post: hieroshima
|
|
Odpłatna pomoc problem z Coopermine ! |
lopik |
0 |
1,569 |
24-02-2011, 19:40
Ostatni post: lopik
|
Użytkownicy przeglądający ten wątek:
|
|
Sponsorzy i przyjaciele
|
|
|