Intereting Posts
Структура Yii: URL-адрес контроллера / Action и параметры Предотвращение загрузки видео почему присвоения в условиях плохой? Программно очистить кеш на symfony 2 Как создать маршрут в symfony 2, который отображает внешний URL? Остановка бесконечного цикла на удаленном сервере PHP Личная переменная Laravel, разделенная между двумя методами в контроллере Существует ли рациональное объяснение этого поведения PHP по поведению? Или PHP ошибка? Многомерный массив php удаляет дубликаты Использование результата функции в качестве аргумента по умолчанию в функции PHP Чтение большого файла по строкам или сохранение его строк в массиве Как найти следующий числовой индекс существующего массива? как получить серийный номер жесткого диска с php на localhost MySQL JSON Storage против двух таблиц Любая функция PHP, которая лишает свойства объекта, которые являются нулевыми?

mysql, если строка не существует, возьмите значение по умолчанию

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

У меня возникают проблемы с выбором требуемого значения, мой запрос работает с определяемым пользователем значением, но, к сожалению, он возвращает значение 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 предпочтения), если нет, он должен будет вернуть значение по умолчанию.

Solutions Collecting From Web of "mysql, если строка не существует, возьмите значение по умолчанию"

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

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

Определенный id в настройках не должен быть там, вместо этого используйте комбинированный ключ preference_id и user_id .

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

Функция IF может быть заменена COALESCE(defined_value, default_value)

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

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

 $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 var. Надеюсь это поможет!