Какой поиск по базе mysql лучше выбрать?

tend

Новичок
Какой поиск по базе mysql лучше выбрать?

Есть столбец в таблице:
`surnames` tinytext NOT NULL,
KEY `surnames` (`surnames`(50))

По нему будет поиск.
В этом столбце может быть записана как одна фамилия (Иванов), так и несколько через запятую (Иванов, Петров, Сидоров...).
Фамилии могут быть двухсимвольные (Ли), поэтому было бы хорошо (хотя не обязательно), если бы была возможность двухсимвольного поиска.
Морфология, релевантность не нужны вообще.
Будет возможность поиска сразу по нескольким фамилиям.

Помогите с тем, каким поиском это лучше делать.
 

Фанат

oncle terrible
Команда форума
сделать так, чтобы в этом поле не лежали фамилии через запятую
 

tend

Новичок
сделать так, чтобы в этом поле не лежали фамилии через запятую
не хочется, другие вещи надо будет переделывать, которые сделаны именно так из-за большого удобства

и fulltext не подходит по ограничению в 4 минимальных символа
остается like, но в моем случае, если я правильно понял из мануала, он не будет использовать индексы, так как нужно будет искать так: LIKE '%Ли%'

на скорую руку придумал, что можно периодически проходиться по таблице, разбивать фамилии, которые через запятую, и записывать по одной фамилии вместе с ID строки (в которой она была) в новую таблицу... и после такого прохода записывать последний ID строки, который есть на данный момент... а в следующий проход начать с этого записанного ID, обрабатывая таким образом только новые записи
тогда можно будет поиск нормально сделать

может есть еще идеи, получше?
 

Фанат

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

куда, блин, катится этот мир
 

pilot911

Новичок
зачем периодически проходить по таблице?

сделать отдельную таблицу, в которой хранятся единичные слова

например,

ID фамилия

1 Иванов
2 Петров
3 Ли


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

ID ID_фамилия ID_главная таблица

после этого сделать обычный поиск c LEFT JOIN, раз морфология не интересует:

WHERE фамилия="Иванов"
 

weregod

unserializer
Автор оригинала: tend
не хочется, другие вещи надо будет переделывать, которые сделаны именно так из-за большого удобства
чувствуете, как некоторые удобства порождают неудобства
 

tend

Новичок
pilot911
извини, но для меня этот left join... в общем я просто поражаюсь тому, как Вы это понимаете... почитал мануал, посмотрел в интернете, но все равно не понял как это работает... что-то туго я понимаю это все... :)
опыта, наверное, у меня в этих вопросах очень мало

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

tend

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