Как построить запрос WHERE с помощью сгруппированных OR - PullRequest
0 голосов
/ 08 ноября 2018

Цель: с помощью golang lib GORM.io попытаться сгенерировать предложение WHERE ( программно ) с (потенциально несколькими) предложениями ИЛИ , сгруппированными вместе .

Пример:

Bad

SELECT * FROM ... WHERE (x = 'one') OR (y = 'two') OR (z = 'three')

Хорошо

SELECT * FROM ... WHERE (x = 'one' AND (y = 'two' OR z = 'three'))

я ...

  • прочитайте документацию GORM от начала до конца
  • посмотрел исходный код GORM; и попытался сделать это с помощью Scopes (), SubQuery () и Expr (), чтобы извлечь только (то, что GORM внутренне называется полем «поиск») и автоматически генерировать строку SQL
  • прочесал глубины переполнения стека для ответа на этот
  • решил сдаться и стать пастухом в Новой Зеландии

Последняя попытка и как я думаю что-то вроде этого будет решено ... иш.

q := gorm.DB
q.Where(`x=?`, `one`).Where(
  gorm.<NewScopeMaybe?).Or(`y=?`, `two`).Or(`z=?`,`three`).Expr()
)

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

...