Pomóżcie skonstruować zapytanie do bazy danych

Odpowiedz Nowy wątek
2014-12-30 21:12
1

Cześć

Mamy ID usera z sesji czyli nasze, nazwijmy je $session_id.
Mamy ID usera, z którym czatowaliśmy. Nazwijmy go $user_id.

Mamy tabelę MySQL o następującej strukturze ( nieistotne kolumny pominąłem ).

message_id INT
sender_id INT
receider_id INT
message_content TEXT
message_date DATETIME

Przykładowe dane są następujące.

1,6,4,asdasdasd,data
1,4,6,assad65sad,data

Problem jest następujący.
Jak przy pomocy jednego zapytania pobrać wiadomości, które otrzymaliśmy i które wysłaliśmy aby uzyskać następnie tablicę wiadomości w formie czatu, tak jak na fb.

Nie problemem jest to rozwalić na dwa zapytania typu:

SELECT * FROM messages WHERE sender_id = '".$session_id."' AND receiver_id = '".$user_id."'
SELECT * FROM messages WHERE sender_id = '".$user_id."' AND receiver_id = '".$session_id."'.

Jak to zrobić jednym zapytaniem ? Jeśli się nie da to jak to wszystko skleić w tablicę asocjacyjną aby wpisy w niej były posegregowane według daty wysłania? Bo również nie jest problemem z 1 zapytania i z 2 zapytania wygenerować tablicę i wykonać array_merge(), tylko że najpierw wpuści wszystkie wpisy zapytania 1 a potem zapytania 2 :(

Ten problem mnie niestety przerasta.

dodanie znaczników <code> i <code class="mysql"> - @furious programming

edytowany 1x, ostatnio: furious programming, 2014-12-31 02:11
Wstawiaj kod w znaczniki kolorujące składnię; - furious programming 2014-12-31 02:11

Pozostało 580 znaków

2014-12-30 21:16
0

Może union selectem dobrze myślę, ę ?
EDIT spróbuj:

SELECT * FROM messages WHERE sender_id = '".$session_id."' AND receiver_id = '".$user_id."' UNION SELECT * FROM messages WHERE sender_id = '".$user_id."' AND receiver_id = '".$session_id."' ORDER BY DATETIME
edytowany 2x, ostatnio: MoorfoxD, 2014-12-30 21:29

Pozostało 580 znaków

2014-12-31 08:41
1

@MoorfoxD: UNION niewiele tu zmieni, dalej masz to samo, tyle ze druga część jest posortowana
@Kisialala: spróbuj tak:

SELECT * FROM messages WHERE sender_id = '".$session_id."' AND receiver_id = '".$user_id."' OR sender_id = '".$user_id."' AND receiver_id = '".$session_id."'
ORDER BY message_date

Pozostało 580 znaków

2014-12-31 09:14

wystarczy tak:

SELECT * FROM messages
WHERE (sender_id = '".$session_id."' AND receiver_id = '".$user_id.") or (sender_id = '".$user_id."' AND receiver_id = '".$session_id.")
ORDER BY message_date 
 
--i po kłopocie
--nie rozumiem w czym Ty masz Pan problem

Pozostało 580 znaków

2014-12-31 10:11
1

Udało mi się dojść wczoraj samemu ale zapomniałem wstawić prawidłową wersję na forum. Laflx oraz Wielki Szczur mają rację :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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