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

0

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

поэтому db выглядит примерно так:

- 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...

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

SELECT * FROM sites
WHERE ....

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

  • 1
    Будьте более конкретны, опубликуйте фактические имена столбцов и таблиц, с которыми вы работаете, и какой столбец вам нужен
  • 0
    извините я перепишу вопрос
Теги:
join
left-join

4 ответа

3
Лучший ответ

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

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

SELECT *
FROM sites s JOIN site_articles sa ON s.site_id = sa.site_id
WHERE ....
  • 0
    но разве это не сделает стол очень большим? Один сайт может содержать сотни статей, и если у вас около 2000 сайтов, вы получите огромное количество записей для одной таблицы.
  • 0
    @alex Если вы правильно его проиндексируете и при необходимости используете разбиение, это не будет проблемой
1

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

1

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

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

или

...
WHERE (some_id = matching_field_in_second_table)
1
SELECT blah, some_id, second_table.some_field FROM first_table
LEFT JOIN second_table
ON second_table.some_field = some_id
WHERE ....

Это то, что вы хотите?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню