2015-04-29 3 views
0

У меня следующие таблицы, как показано ниже.Запрос MySQL с внешним ключом

~~~~articles~~~~~~  ~~~~categories~~~~   ~~~user_categ~~~ ~~users~~~ 
| id_articles |  | c_id   |  | user_cat_id | _|_user_id | 
| article_title |  _|_ category_id |_____ | user_id_fk |_/ |user_name| 
| article_content| _ - | category_name |  \_|__category_id_fk| |user_pw | 
| category_id |/  |________________|  |________________| |_________| 
|_________________| 

Теперь в моей таблице user_categories допустим, что у меня есть следующие данные.

| user_id_fk | cat_id_fk | 
------------------------- 
| 2   | 2.1  | 
| 2   | 3.1  | 
| 2   | 4.1  | 
| 3   | 2.4  | 
------------------------- 

Теперь я хочу, чтобы сделать запрос в MySQL, так что для user_id_fk 2, чтобы получить article_title, article_content из таблицы статей с его соответствующими категориями, такими, как 2.1, 3.1 и 4.1.

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

Надеюсь, что я был достаточно ясным.

+1

Пожалуйста, покажите нам вопросы вы пробовали – VladL

+0

ли user_categ показано в схеме аналогична user_categories? Не могли бы вы сделать это более ясно. –

+0

это та же таблица, я просто сократился, так что схема здесь подходит. Извините за недопонимание! –

ответ

4

Вы можете сделать это с помощью подзапросов. Например:

SELECT article_title, article_content 
FROM articles 
WHERE category_id IN (
    SELECT category_id_fk FROM user_categories WHERE user_id_fk = 1 
) 

Тот же пример с присоединиться:

SELECT article_title, article_content 
FROM articles 
JOIN user_categories ON category_id = category_id_fk 
WHERE user_id_fk = 1 
+0

О, ничего себе, это то, что мне нужно. Большое спасибо!!! –

+0

я просто должен был изменить user_id к user_id_fk –

2

ли это делать?

SELECT article_title,article_content 
FROM articles 
WHERE category_id IN 
(
    SELECT category_id 
    FROM user_categories 
    WHERE user_id_fk = 2 
) 
+0

Да, эта идея в основном работает, однако она должна быть изменена на этом 'SELECT, article_title, article_content ИЗ статей ГДЕ category_id В ( SELECT, category_id_fk FROM user_categories WHERE user_id_fk = 1 )' –

+0

Спасибо - теперь отредактировал мой оригинальный комментарий (ответ vanadium23 более полный) –

Смежные вопросы