MySQL, если строка не существует, получить значение по умолчанию - PullRequest
1 голос
/ 12 февраля 2011

Я создаю модуль предпочтений для системы, чтобы пользователи могли определять свои собственные предпочтения для определенных частей (такие как макет, цветовая схема, домашний экран и т. Д.).Каждое предпочтение в таблице имеет значение по умолчанию (в случае, если пользователь еще не определил его), и как только пользователь изменил свои предпочтения, система должна использовать это пользовательское значение.

У меня проблемы с выбором нужного значения, мой запрос работает с определенным пользователем значением, но, к сожалению, он возвращает null, когда пользователь еще не определил предпочтение.

У меня есть 2 таблицы

table **preferences**:
id
name
default_value

table **preferences_defined**:
id
preference_id
user_id
defined_value

Я хочу создать функцию, которая легко выберет нужное значение, указав user_id человека, к которому относится предпочтение, и имя предпочтения.В настоящий момент мой запрос выглядит следующим образом:

SELECT IF(ISNULL(defined_value),default_value,defined_value) AS result
FROM preferences
LEFT JOIN preferences_defined ON preferences_defined.id = preferences.id
WHERE user_id = 17
AND name = "menu_items"

Я думаю, что в части WHERE user_id = 17 все идет не так, потому что когда нет доступного определенного значения, это означает, что столбца с именем user_id также нет.Мне нужно найти способ сделать эту работу. Итак, мне нужно выбрать определенное значение, если оно существует (с учетом user_id и name предпочтения), если нет, оно должно будет вернуть значение по умолчанию.

Ответы [ 2 ]

1 голос
/ 12 февраля 2011

WHERE (user_id = 17 OR user_id IS NULL) AND name = "menu_items"

И просто для очистки остальной части запроса:

Не нужно указывать id в определенных настройках, используйте комбинированный ключ *Вместо 1007 * и user_id.

Если id из preferences был назван preference_id, длинный оператор ON можно заменить на USING(preference_id)

.1018 * функция может быть заменена на COALESCE(defined_value, default_value)

0 голосов
/ 12 февраля 2011

Если бы я, где вы, я бы сделал один / два запроса.

Таким образом, вы получите:

$query = "SELECT * FROM preferences_defined WHERE user_id = 17 AND name = 'menu_items'"

А затем в PHP:

$rows = mysql_num_rows($query);
if($rows == 0){
$query = "SELECT * FROM preferences WHERE name = 'menu_items'"}

ЭтоВаш правильный запрос всегда будет в переменной $ query.Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...