MySql: объединение двух простых таблиц - PullRequest
2 голосов
/ 23 февраля 2012

В моей базе данных MySql есть две таблицы:

table #1: follows

  follower  |  following
 ------------------------
  john      |  dan
 ------------------------
  peter     |  john
 ------------------------
  peter     |  dan
 ------------------------
  john      |  peter
 ------------------------
  dan       |  peter
 ------------------------

 table #2: questions

  text           |  username
 ----------------------------
  something      |  peter
 ----------------------------
  something1     |  dan
 ----------------------------
  something2     |  peter
 ----------------------------
  something3     |  john

Допустим, я зашел на сайт с именем пользователя "dan".

Я хотел бы видеть самые последние вопросы, заданные людьми, за которыми я следую. В данном случае только вопросы от «Питера».

В таблице «следует» содержатся все зарегистрированные подписки, сделанные кем-то, а в таблице «вопросы» содержатся все вопросы.

Я знаю основы MySql, но ничего не знаю о MySql JOIN. (<- Я думаю, что мне нужно ПРИСОЕДИНИТЬСЯ для достижения моей цели.) </p>

Мой вопрос: так, как я мог сделать это в сценарии PHP?

Ответы [ 3 ]

3 голосов
/ 23 февраля 2012
SELECT q.username, q.text
    FROM follows f
        INNER JOIN questions q
            ON f.following = q.username
    WHERE f.follower = 'dan'
1 голос
/ 23 февраля 2012

Более эффективно выполнять фильтрацию записей в базе данных, а не сбрасывать все записи и делать это внутри скрипта PHP.Ваш запрос может быть выполнен либо с помощью JOIN:

SELECT q.* 
FROM questions q 
JOIN follows f ON f.following = q.username 
WHERE f.follower = 'dan'

, либо с помощью подзапроса

SELECT q.* 
FROM questions q 
WHERE q.username IN ( SELECT f.following
                      FROM follows f
                      WHERE f.follower = 'dan' )

(Вне области вашего вопроса, но вы можете добавить какой-то уникальный индекс уникальности).в свои таблицы, поэтому, если вы хотите удалить конкретный вопрос или, возможно, избавиться от человека, за которым вы следуете, вы можете сделать это, удалив по индексу, вместо того, чтобы указывать комбинацию полей, чтобы перейти к своему уникальномузапись.)

0 голосов
/ 23 февраля 2012

- внутреннее соединение с предложением USING SELECT * из внутреннего соединения b USING ()

- внутреннее соединение с предложением ON SELECT * из внутреннего соединения b ON a.= b.

Попробуйте следующим образом:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...