Как получить значения из двух таблиц в отношениях через один столбец в одной таблице - PullRequest
0 голосов
/ 14 мая 2018

У меня есть две простые таблицы:

Table USERS:
ID  Name
100 User1
243 User2
681 User3

Table MSGS:
FromU ToUser Txt [... DTime]
243   100    Bla bla bla
100   243    Taaa
243   681    Bo bo bo
681   243    Mi mi miiii
681   100    Exemples
100   681    Very good

Relationship:
FromU -> ID (table USERS)
ToUser -> ID (table USERS)

Как я могу получить ВСЕ сообщения, отправленные одним пользователем другому, И ответы, которые пользователь получает от других пользователей, Имена пользователей, я бродю.Например, если я хочу получить все сообщения User2, отправленные в AND, сообщения User2, возвращаемые, тогда мне нужны эти данные:

FromU  Name    ToUser  Name   Txt
243    User2   100     User1  Bla bla bla
100    User1   243     User2  Taaa ...
243    User2   681     User3  Bo bo bo
681    User3   243     User2  Mi mi miiii

Я не могу получить имена пользователей.С этим SQL

SELECT FromU, ToUser, Txt 
FROM msgs 
WHERE FromU = 243 OR ToUser = 243 
ORDER BY DTime ASC

я получаю:

243   100    Bla bla bla
100   243    Taaa ...
243   681    Bo bo bo
681   243    Mi mi miiii

Есть идеи?Я использую MariaDB.Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Я никогда не использовал MariaDB, но в TSSQL вы бы сделали что-то вроде:

SELECT from.Name as FromUser, to.Name, Txt FROM MSGS INNER JOIN USERS AS from ON from.ID = FromU INNER JOIN USERS AS to ON to.ID = ToUser WHERE FromU = 243 OR ToUser =243

Надеюсь, это поможет.

0 голосов
/ 14 мая 2018

Вы должны использовать соединение с пользователем (в примере есть два joi для получения обоих имен)

  "SELECT m.FromU, m.ToUser, m.Txt, u1.Name as from_name, u2.name as to_name 
   FROM msgs m
   INNER JOIN user u1 on m.FromU = u1.id
   INNER JOIN user u2 on m.ToU = u2.id
   WHERE m.FromU = 243 OR m.ToUser = 243 
   ORDER BY m.DTime ASC" 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...