2014-02-16 3 views
1

Мне нужно сделать запрос между этими тремя таблицами: членами, сообщениями и школами.Невозможно вычислить сложный SQL-запрос

В моей таблице «сообщения», я сохраняю идентификатор участника (чтобы узнать, кто написал сообщение). В моей таблице «участники» я сохраняю идентификатор школы члена.

Но я хотел бы создать что-то вроде стены Facebook, где вы могли бы просмотреть список всех сообщений от любого, кто находится в вашей школе.

Мне легко получить все сообщения от кого-либо, но я не могу понять, как получить только сообщения от людей в вашей школе. Я сохраняю идентификатор школы члена в сеансе, поэтому легко узнать, из какой школы нам нужно получить сообщения.

Возможно ли это сделать в одном запросе?

Спасибо!

ответ

4

Вот SQL-запрос:

SELECT  msg.* 
FROM  messages AS msg 
INNER JOIN members AS mem ON msg.member_id = mem.id 
INNER JOIN schools AS sch ON mem.school_id = sch.id 
WHERE  sch.id = ? 

Как Майкл предложил в комментариях, вот статья, которая объясняет SQL присоединяется визуально: http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

+3

NB это также выбрать «свои» сообщения также. (и mem.id <>?) будет сортировать, хотя. –

+2

Это в значительной степени поражает место. Может быть, идея объяснить, что такое объединения, и дать ссылку на дальнейшее чтение, поскольку кажется, что он может быть новым для SQL. Будет также помогать другим, смотрящим на это. –

+0

Хорошее предложение, Майкл. Я обновил свой ответ. Благодаря! –

0
SELECT m.message 
FROM messages m 
JOIN members b 
ON m.memberid = b.memberid 
JOIN schools s 
ON s.schoolid = b.schoolid 
WHERE s.schoolid = "replace by the schoolid stored in session" 
Смежные вопросы