3 сайта на одном движке, с одной общей таблицей - как правильно?

Spear

почемучка
3 сайта на одном движке, с одной общей таблицей - как правильно?

Здравствуйте,
столкнулся с такой проблемой - есть у нас один сайт, назовем его главным. Теперь начальство решило сделать практически копию этого сайта, с другим уклоном. Но регистрация, конечно, авторизация - всё должно быть общее. То есть есть перечень таблиц, которые должны быть общие (например user_accounts). осталньые таблицы (такие как записи в блогах, новости т.п.) - разные. то есть табилцы-то сами одинаковые, но с разными данными.
то есть:

Главный сайт. БД:
blog_posts
news
user_accounts

Второй сайт. БД:
blog_posts
news
user_accounts

Подскажите, пожалуйста, как правилньоее сделать так чтобы оба сайта использовали некотоыре таблицы одни и те же, а некотоыре - каждый сво.
Самый примитивный вариант это в сорцах второго сайта все запросы к таблице user_accounts переписать вместо "SELECT * from user_account" на "SELECT * from main_site.user_accounts". Возможно, есть более адекватные варианты? подскажите пожалуйста!
пс
всего планируется минимум 3 сайта с этой одной базой пользователей (всего общих около 3-5 таблиц, не одна)
 

AmdY

Пью пиво
Команда форума
выносишь назнания таблиц в конфиг называющийся согласно имени сайта плюс постфикс. для нужных таблиц делаешь копию, добавляя префикс(постфикс) с именем сайта
sitename.config.php
---------------------------
define('TABLE_user_accounts', 'user_accounts');
define('TABLE_news', 'sitename_news');

sitename2.config.php
---------------------------
define('TABLE_user_accounts', 'user_accounts');
define('TABLE_news', 'sitename2_news');
 

Spear

почемучка
жесть какая, на самом-то деле. а я всегда думал - ну нахрена люди дефайнят названия таблиц О_О
Спасибо!
подпись "Keep It Simple, Stupid" в тему)
 

AmdY

Пью пиво
Команда форума
хинт, я как раз сейчас один проект так переделываю, только вместо констант использую глобальные переменные в верхнем регистре, их проще вставлять в строку

PHP:
$TABLE_NEWS = 'news';

$sql = "SELECT * FROM $TABLE_NEWS WHERE visible=1";
 

nirex

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

AmdY

Пью пиво
Команда форума
global - зло большее чем сами глобальные переменные, потому что экраном ниже уже непонятно что это глобальная переменная.
лучше $GLOABALS['TABLE_NEWS']
 

cDLEON

Онанист РНРСlub
AmdY
И чем то, что лучше отличается от записи константы в таком же запросе?
 

Adelf

Administrator
Команда форума
Ну тогда

PHP:
$sql = "SELECT * FROM $TABLE_NEWS WHERE visible=1";
Меняется на

PHP:
$sql = "SELECT * FROM $GLOBALS[TABLE_NEWS] WHERE visible=1";
?

Не самый лучший вариант... Уж лучше какой-нибудь типа ORM-стайл формирователь запросов, с автоподстановкой нужных префиксов. Хотя та еще морока..
 

AmdY

Пью пиво
Команда форума
PHP:
$sql = "SELECT * FROM {$GLOBALS['TABLE_NEWS']} WHERE visible=1";
хотя мой хинт относился к подобным случаям.
с автоподстановкой нужных префиксов.
сложно и неудобно.
 

Spear

почемучка
Сделал так:
в конфиге приложения устанавливаются tableOverrideRules
вида:
PHP:
'tablesOverride'=>array('user_accounts' => 'core.user_accounts','some_table'=>'core. some_table')
В драйвере БД:
PHP:
private $_table_names = array();
	public function setTablesOverride($rules=array())
	{
		if(is_array($rules)) {
			foreach ($rules as $table => $alias) {
				if($alias) $this->_table_names[$table] = $alias;
			}
		}
	}
В общей видимости:
PHP:
function table($name) {
	if($alias = Core::DB()->getTableAlias($name)) {
		return $alias;
	} else 
		return $name;
}
И, наконец, в коде:
PHP:
$command = Core::DB()->createCommand('SELECT * FROM '.Table('user_accounts'));
-~{}~ 21.08.09 12:20:

То есть таким образом мне не нужно дефайнить имена всех таблиц, а указать в конфиге новые правила для тех таблиц, для которых они нужны
 
Сверху