SphinxQL сравнивает атрибуты json - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть строка json, которая выглядит следующим образом:

{"mo":[{"from":800,"to":1100},{"from":1400,"to":1700}],"di":[{"from":800,"to":1100},{"from":1400,"to":1700}],"do":[{"from":800,"to":1100},{"from":1400,"to":1700}],"mi":[{"from":800,"to":1100}],"fr":[{"from":800,"to":1300}],"so":[],"sa":[]}

Поле mysql, содержащее эту строку json, объявлено в конфигурации как sql_attr_json.

Следующее WHERE условие работает нормально:

WHERE json.mo[0].from < 1100

однако следующее не дает:

WHERE json.mo[0].from < json.mo[0].to

это приводит к:

sphinxql: syntax error, unexpected IDENT near 'json.mo[0].to

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

Обновление:

Я также пытаюсь сделать:

WHERE (DATE_FORMAT(NOW(),'%H%i') between json.mo[0].from and json.mo[0].to) 

, что приводит к

sphinxql: syntax error, unexpected '(' near '(NOW(),'%H%i')) between json.mo[0].from and json.mo[0].to)

Даже простой

SELECT DATE_FORMAT(NOW(),'%H%i') < 1050

приводит к той же ошибке

 Sphinx expr: syntax error, unexpected '(', expecting $end near '(NOW(),'%H%i') < 1050'

В качестве обходного пути я также попытался

SELECT CONCAT(HOUR(NOW()), MINUTE(NOW())) currentTime;

, но в результате

sphinxql: syntax error, unexpected $end, expecting FROM or ',' near 'currentTime'

В MySQL он работает просто отлично

1 Ответ

0 голосов
/ 08 февраля 2019

Просто еще не реализовано.Попробуйте следующий обходной путь:

mysql> select *, INTEGER(j.mo[0].to) - INTEGER(j.mo[0].from) diff from rt where diff > 0\G
*************************** 1. row ***************************
  id: 1
   s:
   j: {"mo":[{"from":800,"to":1100},{"from":1400,"to":1700}],"di":[{"from":800,"to":1100},{"from":1400,"to":1700}],"do":[{"from":800,"to":1100},{"from":1400,"to":1700}],"mi":[{"from":800,"to":1100}],"fr":[{"from":800,"to":1300}],"so":[],"sa":[]}
diff: 300
1 row in set (0.00 sec)

У меня отлично работает в Manticore Search (форк Sphinx), тоже хорошо работает в Sphinx.

...