Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Zapytanie do bazy
Forum PHP.pl > Forum > Przedszkole
neo1986kk
  1. SELECT id,dokogo,tresc, FROM wiadomosci WHERE odkogo='$user' GROUP BY dokogo) UNION (SELECT id,odkogo,tresc FROM wiadomosci WHERE dokogo='$user' GROUP BY odkogo)


i w bazie jest na przyklad

id | odkogo | dokogo | tresc
1 1 2 aaaaa
2 1 2 bbbbb
3 2 1 cccccc
4 1 3 ddddd


I chciałbym żeby mysql zwrócił wynik wszystkich wiadomosci wysłanych i odebranych zgrupowanych po 'dokogo'

a to co tam namazałem na górze zwraca 3 wyniki

1
3
4

a przecież 1 i 3 to ta sama osoba i lepiej by było gdyby zwracał dwa wyniki w tym przykladzie

3
4

edit: literówki w treści posta
Kshyhoo
Napisz lepiej, co chcesz osiągnąć a nie to, jak to robisz wink.gif
neo1986kk
mam wiadomości w bazie

id odkogo dokogo tresc

i chcę wyciągnąć wszystkie wiadomości, ale w sposób taki, żeby nie dzielil na wysłane i odebrane tylko tak jak by na rozmowy z osobą. Czyli wiadomosci przychodzące i wychodzące jako jedna rozmowa. A moj kod dzieli je na przychodzące i wychodzące czyli


id odkogo dokogo tresc
1 1 2 aaa
2 2 1 bbb
3 1 2 ccc
4 2 1 ddd
dla mojego zapytania to 2 rożne rozmowy
Kshyhoo
Czyli niejako chcesz połączyć wyświetlenie wiadomości, niezależenie czy są to odebrane, czy wysłane - ale dotyczą jednego korespondenta?
Jeżeli tak, wystarczy takie zapytanie:
  1. SELECT * FROM wiadomosci WHERE odkogo='$user' OR dokogo='$user'
neo1986kk
no nie dokońca bo ja potrzebuje zeby wybieral z bazy nazwe osoby z ktora koresponduje

czyli jesli odkogo==user to wyswietlaj==dokogo jest wiadomosc a jesli dokogo==user to odkogo jest

Kshyhoo
No ale wszędzie masz $user, więc nie bardzo kumam, o co biega (może Twój skrypt ma więcej inteligencji ;p).
neo1986kk
dobra może inaczej przełożę to na język ludzki.

Po kolei

1. W bazie o nazwie wiadomosci sa kolumny id, odkogo,dokogo,tresc
2. Baza wygląda tak:


id dokogo odkogo tresc
1 Ja Kasia aaaa
2 Ja Kasia bbbb
3 Kasia Ja cccc
4 JA Tomek ddd

3. Potrzebuje z tego wyciągnąć dokladnie coś takiego(pisze dokladnie to co ma się wyświetać słowo w słowo):

Ostatnie korespondencje:

Korespondecja z Kasia
Korespondencja z Tomek

4. Zapytanie (Select * from wiadomosci where user = dokogo or user = odkogo) wyrzuca coś takiego:

Korespondencja z Kasia
Korespondencja z Kasia
Korespondecja z Ja
Korespondecja z Tomek

5. Grupując - (Select * from wiadomosci where user = dokogo or user = odkogo group by odkogo,dokogo) wyrzuca:

Korespondecja z Kasia
Korespondecja z Ja
Korespondecja z Tomek

Tak naprawe Korespondecja z Ja to nic innego jak korespondecja z Kasia wiec uważam łopatologicznie ze zapytanie powinno wyglądać tak:

Wybierz z bazy wiadomosci w który ja jestem odbiorcą lub nadawcą
pogrupuj te wiadomości (obojętnie czy ja jestem nadawcą czy odbiorcą) według osob z którymi koresponduję
Wyrzuc na ekran wszystkie korespondencje
Kshyhoo
Rozumiem, że Kasia to Ty? ;P
Po pierwsze, zła konstrukcja bazy, lepiej trzymać nazwy userów w osobnej tabeli i odwoływać się poprzez ID.
Po za tym, jeżeli nie chcesz wiadomości od "ja", to po co piszesz sama do siebie ;p No i istnieje też <>ja.
neo1986kk
nie, akurat ja to ja a Kasia to wymyślone przeze mnie imie:P wiem że sam do siebie nie wyślę wiadomości, nie trzymam nazw userów w bazie tylko Id ale wytlumaczyć chciałem dosadnie a może i przesadnie o co mi chodzi.
Kshyhoo
Logujesz się i ładujesz ID do sesji, potem:
  1. SELECT * FROM wiadomosci WHERE dokogo='$useridlog' ORDER BY pw_data DESC

Czyli wszystkie do Ciebie... czego więcej brak?
neo1986kk
sluchaj, przedstawie Ci to w kilku zapytaniach i chyba tak zrobie bo widze ze nie dojdziemy do porozumienia


pobieram wszysktkie wiadomosci z bazy które wysłałem lub które wysłano do mnie

$user to ja
  1.  
  2. SELECT id, odkogo, dokogo, tresc FROM wiadomosci WHERE odkogo = $user GROUP BY dokogo;
  3.  


Mam już wiadomości tylko między mną a innym ludźmi

  1. while ($row = mysql_fetch_array($zapytanie))
  2. {
  3. $id=$row[0];
  4. $odkogo=$row[1];
  5. if($odkogo==$user)
  6. {
  7. wybieram z bazy osobe do kogo jest ta wiadomość
  8. $dokogoWiadomosc = mysql_query("select dokogo from wiadomosci where id=$id");
  9. while ($row=mysql_fetch_array($dokogoWiadomosc))
  10. {
  11. //pobieram do kogo
  12. $jakistamprofil=$row[0];
  13. }
  14. //tutaj wyswietlam sobie
  15. echo 'rozmowa z '.$jakistamprofil
  16.  
  17. }
  18. }
  19.  

To samo musze zrobić dla wiadomości odebranych, czyli tam gdzie dokogo=$user;
Z tym że to po pierwsze nie bedzie posegregowane a po 2 napewno da sie w jednym zapytaniu..

[sql]
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.