Смотря для чего оно вам нужно. Видимо в тех случаях, изменение роли юзера было критичным и по дате создания или обновления отслеживались назначение и изменение роли.
- "Что-то случилось."
- "Когда назначили юзера админом?"
- "12 числа".
- "12 все в порядке, а изменяли роль?"
- "Да, 15 числа."
- "Вот тогда все по звезде и пошло. Найти и выдрать виновных".
SELECT r.id, COUNT(ri.recipe_id) AS count_ingredients
FROM recipes AS r
LEFT JOIN recipes_ingredients AS ri ON r.id = ri.recipe_id
GROUP BY r.id
Будет вывод рецепта с количеством ингредиентов. Можете добавить HAVING count_ingredients > _число_ для выборки. Просто вам если через модели надо - то решение такое же как через CDbCommand, только используя Model::find()->select('.....').
Скорее ошибка в другом, ну попробуйте алиас таблицы задать.
SELECT mt.Title_dish, mt.Caption_dish, mt.Price_dish, mt.Amount_dish
FROM Menu_table mt
LEFT JOIN ReserveMenu_table pmt
ON mt.ID_dish = pmt.ID_dish WHERE pmt.ID_reserve = :id_reserve
Если вы изначально думаете, что базу могут украсть или она сломается - то в чем разница? Что у вас будет 100 баз, что одна. Любую украдут или любая сломается.
Поддерживать большое количество БД - не очень просто. Если это небольшая CRM-система - то зачем вам такие сложности?
Если логика вывода, верстки, кода одна - то проблем подсоединиться к определенной БД для серверных языков программирования не составит проблем.
Создайте массив полей базы данных или получите запросом, а потом в цикле проверяйте на наличие поля и заносите в запрос. Но в цикле делать кучу запросов?