Pomóżcie skonstruować zapytanie do bazy danych

Pomóżcie skonstruować zapytanie do bazy danych
KI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 64
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 ).

Kopiuj
message_id INT
sender_id INT
receider_id INT
message_content TEXT
message_date DATETIME

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

Kopiuj
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:

Kopiuj
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

MD
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 280
0

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

Kopiuj
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
WS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 58
1

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

Kopiuj
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
Laflx
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 76
2

wystarczy tak:

Kopiuj
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
KI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 64
1

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.