MySQL сценарий if / else - PullRequest
       5

MySQL сценарий if / else

2 голосов
/ 20 февраля 2011

Хорошо, вот забавно.У меня есть 2 таблицы: tbl_notes, tbl_notes_categories

Просто у tbl_notes есть идентификатор категории, и я сопоставляю 2 таблицы с этим идентификатором.Итак, ничего сложного.

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

Однако я хочу изменитьэто, в первую очередь, для изучения JOIN и того, как далеко я могу зайти с ними.

Sooooooo, я не собираюсь заставлять пользователя выбирать категорию, и вместо этого я буду устанавливать значение по умолчанию в качестве нулевого значения в tbl_notes,(большинство пользователей выбирают категорию, но это для других случаев)

В запросе я заблокирован для отображения только тех заметок, у которых есть идентификатор категории, который существует в таблице tbl_notes_categories.Но я хотел бы иметь условие, если categoryid не распознан, ИЛИ равен нулю, а затем указать другую строку.Например, "--Unassigned--" или "--Категория не существует" -

Вот мой оригинальный запрос:

SELECT n.notesubject, c.categoryname 
FROM `tbl_notes` n, `tbl_notes_categories` c 
WHERE n.categoryid = c.categoryid 

Это не позволит мне увидеть заметки безcategoryid, поэтому я вытащил вот это:

SELECT n.notesubject, c.categoryname
FROM `tbl_notes` n
 LEFT JOIN `tbl_notes_categories` c ON n.categoryid = c.categoryid

И это помогает, но я застрял в «условии» отображения альтернативного текста, в случае отсутствия записи категории из таблицы категорий.

1 Ответ

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

В MySQL вы можете использовать IFNULL :

SELECT
    n.notesubject,
    IFNULL(c.categoryname, 'Unknown') AS categoryname
FROM tbl_notes AS n
LEFT JOIN tbl_notes_categories AS c
ON n.categoryid = c.categoryid

Это будет работать, если категория не найдена, но также будет работать, если идентификатор категории равен нулю, при условии, что у вас нет соответствующей строки в таблице категорий, потому что тогда она также не будет найдена. Если по какой-то причине вы хотите хотите получить строку в таблице категорий с нулевым идентификатором, то вы можете просто установить ее имя на «Неизвестно».

Обратите внимание, что IFNULL специфичен для MySQL. Функция COALESCE также будет работать и поддерживается большим количеством баз данных.

Для операторов IF / ELSE в целом в MySQL можно использовать IF или для более общего решения используйте выражение CASE: CASE WHEN condition THEN expr1 ELSE expr2 END.

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