Строка без пробелов - как лучше?

  • Автор темы delorge
  • Дата начала

delorge

Guest
Строка без пробелов - как лучше?

Как это все происходит:

Пользователь при регистрации указывает свой Fullname
Скажем Lesly Nilsen. Я его сохраняю в таблице.
пусть будет с 2 полями:
id и name

Потом мне приходит строка LeslyNilsen (без пробелов)

Теперь по ней надо определить id юзера.
С помощью LIKE, как я понимаю, это у меня не получится?

Скорее всего придется в отдельной колонке хранить еще и имена без пробелов, но как-то это некрасиво:(

Считывать все имена в массив и искать по массиву - тоже очень стремно.

Может все таки можно как-то это изящнее сделать?
 

Фанат

oncle terrible
Команда форума
В mysql есть строковые функции.
которые можно примерять в запросах.

Хотя все равно странная задача.
а если придет NilsenLesly?
 

Wicked

Новичок
ИМХО вариант с хранением имен без пробелов наиболее хороший. Могут конечно найтись какие-нть минусы конкретно в твоем проекте...

Еще вариант:
select ... from table where REPLACE(table.name, ' ', '') = 'LeslyNilsen';
Время исполнения пропорционально количеству записей в таблице и на больших таблицах может быть ОЧЕНЬ медленным.
 

delorge

Guest
В mysql есть строковые функции.
Знаю. Но все равно спасибо:)

Хотя все равно странная задача.
а если придет NilsenLesly?
Как придет, так и уйдет:)
Нужно именно то, что ввел юзер в поле Fullname - только без пробелов.
Проблема по сути заключалась в том, что мне нужен был аналог str_replace в SQL.
Почему-то я его не нашел. Теперь буду знать.
Короче говоря банальный RTFM:)

Зачем мне это надо: зарегистрированный пользователь может поставить на своем сайте ссылку:

http://mysite.com/index.php?aff=fullname

где fullname - его имя без пробелов. И за каждого, кто зайдет по этой ссылке и что-нибудь купит, он получит пирожок:)

Если бы я сам писал себе ТЗ, то сделал бы по-другому, наверное.

ИМХО вариант с хранением имен без пробелов наиболее хороший. Могут конечно найтись какие-нть минусы конкретно в твоем проекте...

Еще вариант:
select ... from table where REPLACE(table.name, ' ', '') = 'LeslyNilsen';
Время исполнения пропорционально количеству записей в таблице и на больших таблицах может быть ОЧЕНЬ медленным
.
Вот я и сомневаюсь - скорее всего пользователей будет не так уж и много. И вся эта операция будет производится только при первом посещении сайта. Так что не страшно.

С другой стороны, столбец без пробелов тоже особых проблем не создаст. Наверное все-таки его и оставлю
 

neko

tеam neko
а чтоб с пробелами не поставить ссылку?
или некрасиво?
 

crocodile2u

http://vbolshov.org.ru
Бред какой-то...
А что если будут два пользователя с именами Lesly Nilsen и Les lyNilsen, или даже L e s l y N i l s e n ???

Как ты их различать будешь? В общем, если в имени юзера могут быть пробелы, то они не должны обрабатываться как-то по особому, какждый пробел, равно как и его местоположение, имеет такое значение для идентификации юзера, как и любой другой символ.
 

delorge

Guest
Бред какой-то...
А что если будут два пользователя с именами Lesly Nilsen и Les lyNilsen, или даже L e s l y N i l s e n ???

Как ты их различать будешь? В общем, если в имени юзера могут быть пробелы, то они не должны обрабатываться как-то по особому, какждый пробел, равно как и его местоположение, имеет такое значение для идентификации юзера, как и любой другой символ.
Послушайте, господин!
В данном топике я хотел обсудить проблему, которая описана в первом посте, не вдаваясь в подробности.

Меня спросили, зачем мне это нужно - я ответил.

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

Поверьте, если возникнет описанная вами ситуация, она будет обработана адекватно. Не говоря уже о том, что вероятность ее возникновения весьма низкая.

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

-~{}~ 11.01.05 00:28:

Originally posted by Rynor
btw можно разбить fullname на два поля name и surname :)
И как вы будете разбивать Hasan Abdurahman ibn Hattab?

Уважайте товарищей со сложными именами - им и так в жизни не сладко приходится:)
 

Фанат

oncle terrible
Команда форума
delorge
Послушайте, господин.
Заведите себе свой собственный форум, и там командуйте.
А здесь рекомендую прикрутить фитилёк и сказать спасибо.
 

delorge

Guest
Originally posted by Фанат
delorge
Послушайте, господин.
Заведите себе свой собственный форум, и там командуйте.
А здесь рекомендую прикрутить фитилёк и сказать спасибо.
OK.
Ну вам спасибо я уже сказал:)
Спасибо господину Wicked за функцию REPLACE() и пардон всем за РТФМ'ный вопрос.

И, как говорил шевалье д'Артаньян, "Я прошу прощения, но только за это!"

Теперь, если вас не затруднит, приведите мне цитату, где я нарушил правила форума или пытался здесь командовать.

Признаю, слегка погорячился, но слово "бред" в свой адрес от человека, не видевшего ни строчки моего кода считаю оскорблением...
 

delorge

Guest
Я спокоен как йог:)

Аргументировать будем?

Или у вас тут просто некоторые равнее, чем все и им можно больше?

Ладно все равно оффтоп пошел и я думаю дельного никто ничего больше не напишет.

Приятно было пообщаться с умными людьми:)
 

crocodile2u

http://vbolshov.org.ru
Originally posted by delorge

Поверьте, если возникнет описанная вами ситуация, она будет обработана адекватно. Не говоря уже о том, что вероятность ее возникновения весьма низкая.
Еще раз перечитал тред. Так и не понял, каким образом можно отличить "Lesly Nilsen" от "L e s l y N i l s e n", если предварительно из обоих имен удалить пробелы.

И дело здесь не в вероятности возникновения такой ситуации, а в неправильном подходе, из-за которого создалась (между прочим, высосанная из пальца) проблема и ее кривые решения.
 

delorge

Guest
Еще раз перечитал тред. Так и не понял, каким образом можно отличить "Lesly Nilsen" от "L e s l y N i l s e n", если предварительно из обоих имен удалить пробелы.
Разумеется, никак.

Поэтому когда регистрируется маньяк-извращенец L e s l y N i l s e n :) уже после своего более вменяемого тезки, мы ему говорим что такой пользователь уже имеется и если он захочет зарабатывать плюшки на сслыках (а это опять же далеко не всем нужно), мы с радостью сгенерируем для него уникальную ссылку (и поместим в то поле, где хранятся имена без пробелов).
Все это так сложно и криво? Ради бога - предложите свое решение (но оставьте мне мою строчку без пробелов:))

Почему я так за нее цепляюсь:
Представьте человека, который натыкается в инете на подобную систему и говорит "Я хочу такую же". Ладно, делаем, некоторые вещи заменяем, делаем лучше.
Он смотрит и говорит "Все конечно замечательно, но у них вот это сделано вот так"
Обьясняешь, что это криво - получаешь ответ "но у них же работает...".
Можно спорить дальше, но я в таких случаях стараюсь экономить нервы.
Мне это на самом деле не принципиально. Если клиент платит деньги, он имеет право на мелкие капризы.

Все это ИМХО и оффтоп по сути. Просто хочется расставить точки над i.
 

crocodile2u

http://vbolshov.org.ru
Хозяин - барин, конечно... Но, имхо, такой подход все равно не полностью спасает от "некрасивых URL'ов" - urlencode() все равно придется делать...
 
Сверху