mysql - JOIN (имя таблицы) - PullRequest
       2

mysql - JOIN (имя таблицы)

0 голосов
/ 16 января 2011

У меня есть база данных с таблицей с именем sites (в которой есть несколько полей, включая поле site_ID) и набор таблиц для каждой записи site_ID из таблицы сайтов.

так что БД выглядит примерно так:

- sites [site_ID, blah]
- site_1_articles [title, content]
- site_1_comments [author, comment]
- site_2_articles [title, content]
- site_2_comments [author, comment]
- site_3_articles [title, content]
- site_3_comments [author, comment]
etc...

У меня есть запрос на выборку, который извлекает все поля из таблицы sites:

SELECT * FROM sites
WHERE ....

Как я также могу получить поле title из соответствующей таблицы site_[site_ID]_articles? Я думаю, что мне нужно это в том же запросе с использованием JOIN, потому что количество таблиц довольно большое (более 1000), и 1000 выборок, вероятно, не способ сделать это:)

Ответы [ 4 ]

3 голосов
/ 16 января 2011

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

Вы должны спроектировать свою базу данных, чтобы просверлить одну таблицу site_articles, в которой будет храниться столбец site_idтогда в вашем запросе:

SELECT *
FROM sites s JOIN site_articles sa ON s.site_id = sa.site_id
WHERE ....
1 голос
/ 16 января 2011

Лучше всего переделать вашу базу данных. таблица статей со столбцом id в качестве первичного ключа и комментарии к таблице со столбцом article_id. Тогда вы присоединитесь к этому.

1 голос
/ 16 января 2011
SELECT blah, some_id, second_table.some_field FROM first_table
LEFT JOIN second_table
ON second_table.some_field = some_id
WHERE ....

Это то, что ты хочешь?

1 голос
/ 16 января 2011

Вы можете присоединиться к нескольким условиям или добавить его в предложение WHERE

...
ON (blah = boo) AND (some_id = matching_field_in_second_table)
...

или

...
WHERE (some_id = matching_field_in_second_table)
...