MySQL - wybieranie pola z tabeli wiele do wielu

0

Witam ;)
W ramach ćwiczeń stworzyłem sobie 2 tabele uzytkownicy i wiadomosci

uzytkownicy


id| nick |
1 | userek1 |
2 | userek2 |

wiadomosci


id| od | do | tytul | tresc | |
1| 1 | 2 | Hej | Hej co u Cb? |
2| 2 | 1 | Re: Hej | Hej, dobrze :) |

Pola od i do w tabeli wiadomości są połączone z polem id z tabeli uzytkownicy (relacja jeden do wielu)

Chcę aby tabela wynikowa wyglądała tak


nick_od| nick_do | tytul | tresc |
userek1| userek2 | Hej | Hej co u Cb? |
userek2| userek1 | Re: Hej | Hej, dobrze :)|

Próbowałem użyć INNER JOIN wiadomosci ON ((wiadomsci.od=uzytkownicy.id) AND (wiadomsci.do=uzytkownicy.id)) ale wynik jest pusty

Jeśli już było to prosiłbym o wskazanie tematu (będę wdzięczny)

2

Spróbuj:

SELECT U1.nick AS nick_od, U2.nick AS nick_do, tytul, tresc FROM wiadomosci AS w
INNER JOIN uzytkownicy AS U1 ON u1.Id = w.od
INNER JOIN uzytkownicy AS U2 ON u2.Id = w.do
0

zagnieżdżony 'select' albo podwójny LEFT OUTER JOIN

0
firefox napisał(a):

Spróbuj:

SELECT U1.nick AS nick_od, U2.nick AS nick_do, tytul, tresc FROM wiadomosci AS w
INNER JOIN uzytkownicy AS U1 ON u1.Id = w.od
INNER JOIN uzytkownicy AS U2 ON u2.Id = w.do

Działa, dzięki teraz to spróbuje zrozumieć, ciągle się edukuje i taka wiedza bardzo mi się przyda :)

0
SELECT 
  (select nick from uzytkownicy where uzytkownicy.id=wiadomosci.od) as nadawca ,
  (select nick from uzytkownicy where uzytkownicy.id=wiadomosci.do) as odbiorca ,
  tytul,
  tresc
FROM 
  wiadomosci
0
grzegorz_so napisał(a):
SELECT 
  (select nick from uzytkownicy where uzytkownicy.id=wiadomoci.od) as nadawca ,
  (select nick from uzytkownicy where uzytkownicy.id=wiadomosci.do) as odbiorca ,
  tytul,
  tresc
FROM 
  wiadomosci

#1054 - Unknown column 'wiadomoci.od' in 'where clause'

0

W temacie napisałeś o relacji wiele do wielu. Nie wiem czy to błąd czy pomyłka. W tym wypadku mamy dwie relacje 1:N (jeden do wielu). Gdyby jedna wiadomość mogła mieć wielu adresatów, wówczas można było by mówić o relacji wiele do wielu. W tym przypadku zawsze jest jeden odbiorca i jeden nadawca.

0
mariano901229 napisał(a):

W temacie napisałeś o relacji wiele do wielu. Nie wiem czy to błąd czy pomyłka. W tym wypadku mamy dwie relacje 1:N (jeden do wielu). Gdyby jedna wiadomość mogła mieć wielu adresatów, wówczas można było by mówić o relacji wiele do wielu. W tym przypadku zawsze jest jeden odbiorca i jeden nadawca.

Pomyłka, co innego napisałem w temacie co innego w tekście (gdzie zaznaczyłem fakt że to jeden do wielu) ;)

0
grzegorz_so napisał(a):
SELECT 
  (select nick from uzytkownicy where uzytkownicy.id=wiadomosci.od) as nadawca ,
  (select nick from uzytkownicy where uzytkownicy.id=wiadomosci.do) as odbiorca ,
  tytul,
  tresc
FROM 
  wiadomosci

Działa, dzięki też przeanalizuje :)

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