Вы можете выполнить проверку с помощью объекта Errors / BindingResult. Добавьте аргумент Errors в ваш метод контроллера и настройте сообщение об ошибке при обнаружении ошибок.
Ниже приведен пример примера: errors.hasErrors () возвращает true, если проверка не удалась.
@RequestMapping(value = "/user", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<String> saveUser(@Valid @RequestBody User user, Errors errors) {
if (errors.hasErrors()) {
return new ResponseEntity(new ApiErrors(errors), HttpStatus.BAD_REQUEST);
}
return new ResponseEntity<>(HttpStatus.OK);
}
Просто добавьте «и категорию» ...
SELECT * FROM links
WHERE category LIKE '1|%'
AND category NOT LIKE '1|6|199|%','1|6|200|%'
ORDER BY score DESC LIMIT 9
На самом деле условие, разделенное запятыми, не является синтаксисом, с которым я знаком. Если это не работает, попробуйте вместо этого:
SELECT * FROM links
WHERE category LIKE '1|%'
AND category NOT LIKE '1|6|199|%'
AND category NOT LIKE '1|6|200|%'
ORDER BY score DESC LIMIT 9
Вы можете использовать регулярные выражения
:
SELECT *
FROM links
WHERE category LIKE '1|%'
AND category NOT REGEXP '^1\\|6\\|(199|200)\\|'
ORDER BY
score DESC
LIMIT 9
Обратите внимание, что REGEXP
не используют индексы, а LIKE
- .
В этом запросе LIKE '1 |%'
будет служить грубым фильтром с использованием индекса в категории
, если таковая имеется, а REGEXP
) будет фильтровать результаты.
Я думаю, что более серьезная проблема заключается в том, что у вас есть -нормализованные таблицы. Правильный ответ - нормализовать таблицы.
Но если вы не можете этого сделать, вам следует использовать запятые в качестве разделителей и вместо FIND_IN_SET ()
:
WHERE FIND_IN_SET('1', category) > 1
AND FIND_IN_SET('6', category) > 1
AND FIND_IN_SET('199', category) = 0
AND FIND_IN_SET('200', category) = 0