2011-01-16 2 views
0

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

так дб выглядит что-то вроде:

- 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 выборок, вероятно, не так.

+1

Будь конкретнее, разместите фактические имена столбцов и таблиц, с которыми вы работаете, и какой столбец вам нужен – James

+0

извините, я переписал вопрос – Alex

ответ

3

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

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

SELECT * 
FROM sites s JOIN site_articles sa ON s.site_id = sa.site_id 
WHERE .... 
+0

, но разве это не сделает таблицу очень большой? На одном сайте могут быть сотни статей, и если у вас есть 2000 сайтов, вы получаете огромное количество записей для одной таблицы. – Alex

+0

@alex. Если вы индексируете его правильно и при необходимости используете разделение, это не проблема –

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

это то, что вы затухающий?

1

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

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