Сравнение полей, когда поле равно самому себе

Здравствуйте!

Наверное глупый вопрос задам, так как недавно переехал на мантикор и адаптирую запросы под синтаксис мантикор. Как реализовать запрос вида SELECT * FROM test WHERE floor != floor_total , т.е. значение поля floor не должно равняться полю floor_total, делать поздапросы для каждого из полей не вижу смысла. Задача найти все объекты, кроме объектов, где поля равны, в моем случае “не последний” этаж в доме, когда известен текущий этаж и этажность.

вы не можете извлеч контент полнотестовых полей, те прямо сделать field_floor != field_floor_total нельзя

Вы можете или сравнить длины полей или завести аттрибуты с контектом полей и сравнивать их

  • можно проиндексировать контент полей в int аттрибут типа SELECT ... crc32(floor) as cmp_floor + sql_uint_attr = cmp_floor
  • можно проиндексировать контент полей в строковый аттрибут и сравнивать строчки

хотя это больше похоже на выражения с аттрибутами - чем на полнотекстовые поля

Совершенно верно, типы полей int, мантикор не дает выполнить такую команду. Мантикор в моем случае используется в качестве быстрого индекса, а не для полнотекстового поиска

так если floor и floor_total это колонки \ аттрибуты то такое должно работать же

SELECT * FROM test WHERE floor<floor_total

к сожалению не работает

нашел тикет на гитхабе Sphinxql: syntax error, unexpected IDENT, expecting CONST_INT or CONST_FLOAT or DOT_NUMBER · Issue #349 · manticoresoftware/manticoresearch · GitHub, я так понимаю данный функционал просто не реализован, ошибка такая же

sphinxql: syntax error, unexpected IDENT, expecting CONST_INT or CONST_FLOAT or DOT_NUMBER or ‘-’ near ‘floor_total’

Решил так, как проверка на 1 и 0:
SELECT id, floor, floor_total, INTEGER(floor = floor_total) as floor_eq FROM test WHERE floor_eq = 0

Или так как-то можно:

mysql> create table test(f text, floor int, floor_total int);
mysql> insert into test(id, floor, floor_total) values(0, 1, 2);
mysql> insert into test(id, floor, floor_total) values(0, 1, 10);
mysql> select abs(floor - floor_total) diff, * from test where diff > 0;
+------+---------------------+-------+-------------+------+
| diff | id                  | floor | floor_total | f    |
+------+---------------------+-------+-------------+------+
|    1 | 5405040262701383681 |     1 |           2 |      |
|    9 | 5405040262701383682 |     1 |          10 |      |
+------+---------------------+-------+-------------+------+
mysql>