2011-01-16 3 views
1

У меня есть набор таблиц базы данных с именем, как:MySQL - Выберите отдельные строки из нескольких таблиц

site_1_details 
site_2_details 
site_3_details 
... 
site_420_details 

все таблицы имеют одинаковые поля, как:

ID | SETTING | VALUE 
---------------------- 
1  name  Site 1 Name 
2  desc  Site 1 Desc 
3  email  Site 1 Email... 
... 

(только значение поля разные)

Как я могу получить набор значений из определенных таблиц?

Например, я хочу получить имя & значений электронной почты с сайтов 3,7 и 15. Как я могу сделать это с помощью SQL-запроса?

ответ

4
SELECT 3 AS siteID, name, email 
FROM site_3_details 

UNION 

SELECT 7 AS siteID, name, email 
FROM site_7_details 

UNION 

SELECT 15 AS siteID, name,email 
FROM site_15_details 

Это ужасно плохой дизайн. Почему ты не мог бы поставить поле «siteID» в одну таблицу, which'd уменьшить запрос на:

SELECT name, email 
FROM site_details 
WHERE siteID IN (3,7,15); 

комментарий катамнестического:

А ну, тогда вы просто модифицировать отдельные запросы:

SELECT 7 AS siteID, ID as fieldID, name AS fieldName 
FROM site_7_details WHERE SETTING IN ('name', 'email') 

UNION 

.... 

По какой причине вы разработали такие таблицы? Похоже, вы пытаетесь реализовать свою собственную базу данных в ТОПе механизма базы данных, которая уже отлично подходит для такого рода обработки реляционных данных.

+0

но имя и адрес электронной почты не являются полями, это записи. действительно ли это работает с записями? Поля: ID/Settings/Value – Alex

+0

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

+0

И? Для этого нужны базы данных - выбор конкретных данных на основе ваших требований. Там есть базы данных MySQL с таблицами с буквально миллиардами строк. Несколько сотен или несколько тысяч строк - это НИЧЕГО *. –

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