2012-02-23 2 views
2

у меня есть две таблицы в моей базе данных MySql: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 

Допустим, что я вошел на сайт с именем «дан».

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

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

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

Мой вопрос: Как я могу это сделать в PHP-скрипте?

Заранее спасибо ...

ответ

3
SELECT q.username, q.text 
    FROM follows f 
     INNER JOIN questions q 
      ON f.following = q.username 
    WHERE f.follower = 'dan' 
+0

Ahh ... thanks Joe! Это работает! ;) Я бы хотел задать вопрос: как это работает? Я довольно новичок в MySql JOIN, поэтому, если мне захочется изменить сценарий позже, я не знаю, как это сделать! Не могли бы вы дать краткое объяснение, что в нем? Благодаря... :) – Akos

1

Это более эффективно, чтобы сделать вашу запись фильтрации на базе данных, а не сбрасывать все ваши записи вниз и делать это внутри вашего 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

- внутреннее соединение с разделом USING SELECT * ОТ в INNER JOIN б ИСПОЛЬЗОВАНИЕ()

- внутреннее соединение с пунктом ON SELECT * ОТ в INNER JOIN B от а. = b.

Попробуйте так: