Ответ 1
SELECT * FROM mytable
WHERE REPLACE(username, ' ', '') = REPLACE("John Bob Jones", ' ', '')
Какой лучший способ запустить запрос, чтобы пробелы в полях игнорируются? Например, следующие запросы:
SELECT * FROM mytable WHERE username = "JohnBobJones"
SELECT * FROM mytable WHERE username = "John Bob Jones"
найдут следующие записи:
John Bob Jones
JohnBob Jones
JohnBobJones
Я использую php или python, но я думаю, что это не имеет значения.
SELECT * FROM mytable
WHERE REPLACE(username, ' ', '') = REPLACE("John Bob Jones", ' ', '')
Это зависит. Если вы не заботитесь о хорошей производительности, вы можете сделать много вещей, но большинство из них будут медленными. Может быть, это хорошо для вас, но я оставлю этот ответ здесь, если другие читают действительно хотят быстрое решение.
Если вам нужна очень высокая производительность, вы должны индексировать строку без пробелов в базе данных. В PostgreSQL вы можете создать индекс для функции. Вы можете использовать это для создания индекса в столбце с пробелами, замененными пустой строкой. Преимущество этого метода заключается в том, что он не требует обслуживания, кроме создания индекса.
В MySQL вы не можете этого сделать, поэтому самым простым способом было бы дублировать данные в базе данных - один раз с пробелами и один раз без них. Используйте столбец без пробелов в предложении WHERE, но исходный столбец в списке столбцов SELECT. Это требует большего обслуживания, поскольку столбцы должны храниться в синхронизации. Вы можете сделать это с помощью логики приложения или триггеров базы данных.
Предлагаемое решение выглядит очень хорошо, но ужасно для производительности, если возможно ограничить запрос чем-то вроде
SELECT * FROM mytable WHERE имя пользователя, например "John%" и REPLACE (имя пользователя, '', '') = REPLACE ( "John Bob Jones", '', '')
Также вы можете использовать REGEXP.
SELECT * FROM mytable WHERE имя пользователя REGEXP '^ John * Bob * Jones'
И помните о производительности, операции в том, где, в общем, плохая идея.
Взгляните на http://dev.mysql.com/doc/refman/5.7/en/pattern-matching.html
ПОПРОБУЙТЕ ЭТО:
SELECT * FROM mytable WHERE username =REPLACE("John Bob Jones", ' ', '')
Один из способов - использовать LIKE и WildCards для создания запроса citeria. Что-то вроде:
SELECT * FROM mytable WHERE имя пользователя LIKE 'JohnBobJones';