Надеюсь, я четко задаю этот вопрос .... если нет, пожалуйста, скажите мне, и я быстро пересмотрю.
Этот вопрос вращается вокруг моей таблицы настроек учетной записи (account_data) ... по существу, если учетная запись имеет запись в таблице, тогда настройка определяется ... если нет, тогда мне нужно загрузить значение по умолчанию (account_id нулевой). Структура таблицы:
CREATE TABLE `account_data` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`account_id` int(11) DEFAULT NULL,
`name` varchar(255) NOT NULL,
`value` varchar(255) NOT NULL,
`updated` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
`created` datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`),
UNIQUE KEY `account_id_name` (`account_id`,`name`) USING BTREE,
KEY `account_id` (`account_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Краткое примечание: account_id может быть (не определено) внешним ключом для таблицы счетов, столбца id.
Пример набора данных:
account_id | name | value
null | email_allowed | 0
1 | email_allowed | 1
null | persist_login | 0
null | homepage_version | small
Так что в настоящее время я делаю следующее, чтобы получить одно значение настройки для учетной записи ...
SELECT * FROM account_data WHERE `name` = :name AND (account_id = :account_id OR account_id IS NULL) ORDER BY account_id DESC LIMIT 1
Кажется, это работает нормально ... если по какой-то причине это не очень хорошая идея, я бы хотел услышать почему. Однако, когда мне нужно получить все значения account_data для одной учетной записи, я делаю два запроса ...
SELECT * FROM account_data WHERE account_id = :account_id
и
SELECT * FROM account_data WHERE account_id is null
и затем объединить их в моем коде .... есть ли способ сделать это только одним запросом?