(О. Джонс объяснил, как избавиться от LCASE
; я буду обращаться к OR
в контексте данного запроса.)
План A: Ваше приложение должно распознавать, являются ли имена полными или сокращенными,Если вы ожидаете стандартный двухбуквенный код страны, например KH
, проверьте длину ввода и создайте соответствующий запрос, чтобы избежать ввода OR
.country_code
должно быть CHAR(2)
CHARACTER SET ascii`.
Plan B: Превратить OR
в UNION
.При исходном запросе вам понадобится 4 SELECTs
в UNION
.После плана А вы можете обойтись только с 2.
План С: иметь справочную таблицу со всеми вариантами city
- прописанными, сокращенными, на китайском и т. Д. Эта таблица будет отображаться наканоническое написание, которое используется в основной таблице.При этом вы избегаете OR
для city
.
План D: иметь дополнительную колонку TEXT
с указанием города, города, страны, страны и всех стран.И, возможно, варианты написания.Индексируйте этот столбец с FULLTEXT
.Предостережение: есть проблемы с короткими «словами»;вам, вероятно, следует установить минимальный размер токена 2, чтобы поймать код страны.