Консультация № 70154
09.01.2007, 16:15
0.00 руб.
0 9 3
Здравствуйте!

Помогите пожалуйста сделать таблицу. Вся заковырка заключается в оптимизации и выборке по первым буквам фамилии. Сейчас я не могу точно сказать, будет это 1-а, 2-е или 3 буквы. Наверное правильнее всего это сделать настраиваемым, причем не трогая структуры таблицы.

Так вот, как мне считать авторов только на определенные буквы? И как под это сделать таблицу?
У меня сделан столбец `litera`, в который предполагается писать первые 3 буквы фамилии, но может есть вариант по лучше?

И Как искать записи начинающиеся с символов, без полного совпадения строки?

Если нужна индексация, пожалуйста приведите примеры, я так и не понял как её делать.
предположительные столбцы:

id - ид записи
link - ссылка на оригинал
litera - первые буквы
first_name - имя
last_name - фамилия
number - дополнитеьный номер

Обсуждение

Неизвестный
09.01.2007, 16:24
общий
БД какая?
Неизвестный
09.01.2007, 16:25
общий
это ответ
Здравствуйте, Талипов А Н!
Поиск по частичному совпадению осуществляется так:

Select * from Table where last_name like "Аб%"

т.е. % заменяет произвольное количество символов.
Таким же образом можно осуществлять последовательный поиск, когда при каждой введенной букве заново строится запрос, который соответственно выдает меньшее количество записей.
Неизвестный
09.01.2007, 16:25
общий
это ответ
Здравствуйте, Талипов А Н!
В структуре ничего менять нет необходимости, в запросе укажите что-то вроде: last_name like @search. @search равен ‘П%‘ или что вам необходимо.
Неизвестный
09.01.2007, 16:40
общий
mysql из php.
Неизвестный
09.01.2007, 22:16
общий
это ответ
Здравствуйте, Талипов А Н!
Зачем делать поле, хранящее первую букву, если её можно узнать средствами MySQL?
Вот запрос, позволяющий определить количество авторов на определённые буквы:
SELECT SUBSTRING(last_name,1,1) as first, COUNT(last_name) as count FROM avtori GROUP BY first
Неизвестный
09.01.2007, 23:57
общий
Загиров Рустам, если можно объясните вашу запись, не очень понял. Где там сама буква? authori это предпологаю таблица?А столбец `litera` добавил для ускорения поиска. Хотя если говорить честно, в ныне действующей таблице его нет. Так как использую первый подсказанный вариант.Не понимаю, как делать индексацию, она могла бы наверное здесь помочь.И вообще хочу максимально оптимизировать таблицу, так как работа с ней будет постоянна.Выводить придётся по разномунапример в отсортированном по алфавиту порядке, с разными дополнительными условиями.
Неизвестный
10.01.2007, 06:27
общий
Так и делайте INDEX на last_name, для фамилии символов 10 будет достаточно:CREATE INDEX part_of_name ON authors (last_name(10));Индекс будет использоваться если аргумент LIKE - константа и не начинается со спецсимвола.т.е: where last_name like "Аб%" - индекс работает;where last_name like "%бвгд%" - индекс работать не будет(MySQL такие запросы тоже оптимизирует, но не совсем с индексами)
Неизвестный
10.01.2007, 06:35
общий
Ага! С индексом понятно, но я думаю вполне должно хватить 3 символа. Куда там 10 нужны?
Неизвестный
10.01.2007, 06:56
общий
При поиске, по первым 3-м буквам, действительно, хватит 3-х(подзабыл сам вопрос, когда писал).
Форма ответа