• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z zapytaniem SQL Message System

Object Storage Arubacloud
0 głosów
166 wizyt
pytanie zadane 12 kwietnia 2017 w SQL, bazy danych przez ThePatrykOOO Dyskutant (8,400 p.)

Witam, mam troszkę mały problem, tworzę tzw. message system, czyli coś podobnego co można zobaczyć na facebooku w postaci wysyłania wiadomości do znajomych przy użyciu np. messengera. Mam problem z sformułowaniem zapytania do bazy danych. 

Tak wygląda mój kod:

public function showMessages($idToSent)
    {
        $sql = "SELECT u.name, u.surname, m.text, m.data, m.fromUser, m.toUser FROM messages as m, users as u WHERE ((m.fromUser=:id AND m.toUser=:idToSent) OR (m.toUser=:idToSent AND m.fromUser=:id)) AND u.id=(m.toUser OR m.fromUser)";
        $question = \Connect\Connect::connect()->prepare($sql);
        $question->bindValue(':id', $_SESSION['iduser'], PDO::PARAM_STR);
        $question->bindValue(':idToSent', $idToSent, PDO::PARAM_STR);
        $question->execute();
        foreach ($question as $value) {
            $name = $value['name'];
            $text = $value['text'];
            $data = $value['data'];
            if($value['toUser'] == $_SESSION['iduser']) {
                echo '<div class="alert alert-success">
                        '.$text.'
                    </div>';
            } else {
                echo '<div class="alert alert-info">
                        <strong>'.$name.': </strong>'.$text.'
                    </div>';
            }
        }
    }

Dla lepszego zrozumienia oznaczmy sobie :id 1 czyli usera zalogowanego(wysyła wiadomość), :idToSent czyli usera(otrzymuje wiadomość). Gdy wysyła user wiadomość wszystko jest okej. Gdy user który odbiera wiadomość to jej nie widzi. Działa to wzajemnie

Users as u - tabela usery z której wyciągam id usera, imie i nazwisko.

fromUser - to osoba która wysyła

toUser - osoba która dostaje wiadomość

W razie wyjaśnienia proszę pytać! Z góry dzięki za pomoc

komentarz 12 kwietnia 2017 przez xandros Nałogowiec (29,450 p.)
Widzę, że dalej namespace są niepoprawione.

Zwróć wynik, a nie używasz echo, bo inaczej mieszasz warstwy aplikacji. Polecam instrukcje yield.

Zaraz zobacze, co z tym problemem.

1 odpowiedź

+1 głos
odpowiedź 12 kwietnia 2017 przez xandros Nałogowiec (29,450 p.)

Wysłanie wiadomości:

  1. User wysyła formularz z tytulem oraz wiadomoscia do odpowiedniego usera
  2. Dodajesz ten formularz do bazy z aktualnym czasem (tabela messages) (szyfrowanie?)
  3. Wyciągasz id usera, który wysłał tę wiadomość, id usera, który jest odbiorca
  4. Dodajesz do bazy id wiadomosci, id nadawcy, id odbiorcy + ewentualne is_read (tabela do przechowywania adresacji wiadomosci)
  5. informujesz, ze dzialanie zostalo zakonczone (alert?)


Odebranie wiadomości:

  1. Wyciągasz z bazy wszystkie wiadomosci, ktore zostaly nadane i odebrane przez danego usera (SELECT z JOIN tabeli z wiadomosiciami i adresacją), oczywiscie orderujesz je po dacie
  2. Wyświetlasz te wiadomości w sformatowany sposób


Odebranie ostatniej wiadomości:

  1. Wyciągasz z bazy wszystkie wiadomosci, ktore zostaly nadane i odebrane przez danego usera (SELECT z JOIN tabeli z wiadomosiciami i adresacją), oczywiscie orderujesz je po dacie i ustawiasz limit 1


Do realtime radzę użyć socketów oraz kassandry, a nie SQLa

komentarz 12 kwietnia 2017 przez ThePatrykOOO Dyskutant (8,400 p.)
nadal nie wiem jak sformułować zapytanie
komentarz 12 kwietnia 2017 przez xandros Nałogowiec (29,450 p.)
Insert, czy select?
komentarz 12 kwietnia 2017 przez ThePatrykOOO Dyskutant (8,400 p.)
select
komentarz 12 kwietnia 2017 przez xandros Nałogowiec (29,450 p.)
SELECT * 
FROM messages_users 
INNER JOIN  messages ON messages_users.message_id = message.id
WHERE messages_users.recipient_id = :id OR messages_users.sender_id = :id
ORDER BY messages.created_at ASC;

Mogłem się gdzieś pomylić. Pisałem z pamięci.

Podobne pytania

0 głosów
2 odpowiedzi 906 wizyt
pytanie zadane 28 marca 2017 w SQL, bazy danych przez kB52 Nowicjusz (220 p.)
0 głosów
1 odpowiedź 82 wizyt
pytanie zadane 9 września 2016 w SQL, bazy danych przez Patryk Rafał Bywalec (2,700 p.)
0 głosów
1 odpowiedź 100 wizyt
pytanie zadane 28 grudnia 2016 w PHP przez jarek9244 Gaduła (3,430 p.)

92,615 zapytań

141,465 odpowiedzi

319,782 komentarzy

61,997 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...