У меня есть база данных с таблицей 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 выборок, вероятно, не способ сделать это:)
Нет, вы не можете динамически ссылаться на таблицы (если только не использовать сохраненный proc для создания подготовленных операторов)
Вы должны создать свою базу данных, чтобы открыть одну таблицу site_articles
, в которой будет храниться столбец site_id
, а затем в вашем запросе:
SELECT *
FROM sites s JOIN site_articles sa ON s.site_id = sa.site_id
WHERE ....
Лучше всего переделать вашу базу данных. таблицы с столбцом id в качестве первичного ключа, а таблица - со столбцом article_id. Тогда вы присоединитесь к этому.
Вы можете присоединиться к нескольким условиям или добавить его в предложение WHERE
...
ON (blah = boo) AND (some_id = matching_field_in_second_table)
...
или
...
WHERE (some_id = matching_field_in_second_table)
SELECT blah, some_id, second_table.some_field FROM first_table
LEFT JOIN second_table
ON second_table.some_field = some_id
WHERE ....
Это то, что вы хотите?