Я передаю dict, который я получаю из mysql, непосредственно в json. К сожалению, json не работает при попытке проанализировать логическое значение со следующей ошибкой:
'Current token (VALUE_NUMBER_INT) not of boolean type
Является ли следующий предпочтительный способ преобразования TINYINT(1) в логическое значение javascript?
if (tm.is_live, 'true', 'false') live_for_preorder,
Это не похоже на ошибку MySQL. Но это выглядит как ошибка Elastic Search: github.com/elastic/elasticsearch/issues/10056
Как ты получил диктант? Какая версия MySQL? Какая структура таблицы / запрос?
@MadhurBhaiya поле tm.is_live - это TINYINT (1), а значения будут либо 0, либо 1. Я думаю, что json (ES) исключает «истину» / «ложь».
что такое live_for_preorder тип данных и размер?
@comphonia tm.is_live - это TINYINT(1), а live_for_preorder - это просто псевдоним.
@DavidL ваш существующий запрос должен работать. Вы также можете преобразовать If() в совместимый с ANSI SQL CASE..WHEN (если вы измените БД позже, поскольку IF() специфичен только для MySQL). В случае CASE..WHEN это выглядело бы так: CASE tm.is_live WHEN 0 THEN 'false' ELSE 'true' END AS live_for_preorder






Я, кажется, припоминаю, что MySQL - одна из тех редких баз данных, которые позволяют использовать IF в обычных операторах SELECT, где большинство dbms настаивают на case, IF зарезервировано для потока управления.
Таким образом, похоже, что MySQL сообщает вам, что вы не предоставляете IF с логическим значением, когда он этого требует. Преобразуйте ваш оператор в сравнение, которое возвращает логическое значение:
if (tm.is_live=1, 'true', 'false') live_for_preorder,
(Если вы используете 1 для истины и 0 для false)
Чтобы сделать ваш набор навыков db более переносимым, было бы хорошо выработать привычку использовать CASE, а не IF в выбранных запросах:
CASE tm.is_live WHEN 1 THEN 'true' ELSE 'false' END live_for_preorder,
CASE WHEN tm.is_live = 1 THEN 'true' ELSE 'false' END live_for_preorder,
В кейсе может быть любое количество WHEN, но вы не можете смешивать формы, это либо CASE variable WHEN comparevalue THEN outputvalue [when when when else] END, либо CASE WHEN test THEN output [when when when else] END.
Сервер Sql позволит вам использовать iif (условие, результат, если истина, результат, если ложь) в операторе выбора, но он используется очень редко (по крайней мере, из того, что я читал / видел). docs.microsoft.com/en-us/sql/t-sql/functions/…
Но ведь это реализовано как функция, не так ли? И вы не можете использовать IIF для потока управления? Все основные СУБД, о которых я знаю, настаивают на CASE для присвоения и IF для потока, за исключением того, что MySQL допускает оба варианта (грязный!)
Если вы хотите преобразовать в логическое значение MySQL, просто выполните:
select (tm.is_live <> 0) as live_for_preorder,
Если это будет принято Javascript, это будет самым простым решением.
Какие будут возможные значения в поле
tm.is_live?