thenexus
Новичок
Поиск по ~16 миллионам строк + кросс поиск по 3 миллионам строк
Добрый день товарищи
Помогите решить проблему... пол года мучался так и не получилось сделать это так.. что бы работало моментально.
Такая задача:
Это я пытался сделать сайт для магазина автозапчастей, там вбиваешь код запчасти и все выводится моментально, пример тут - www.partcar.ru пример кода - 0336255000 (только он не ищет через кросс базу, не нашел нужный код).
Суть - поиск по прайсам загруженные в базу данных, строк прайсов более 16-ти миллионов, строк в кросс базе около 3-х миллионов.
Есть 2 таблицы prices и cross
prices имеет следующие ячейки:
id, key, search_key
key - список кодов через любой специальный символ (если можно то - "|" ) (может быть до 7ми штук) оригенального вида. Тоесть например 033-6255-000 этот со всякими тире и т.п. что есть по мимо цыфр - код оригенального вида, а код состоящий только из цифр это...
search_key - список кодов через тот же специальный символ, это поисковой код... когда в базу заносится прайс, все что вносится в key - очищается от всего кроме букв и цыфр и заносится в эту ячейку.
cross имеет следующие ячейки:
id, search_key, key
search_key - тут может быть только ОДИН код.
key - тут тоже может быть только ОДИН код. Щас объясню в чем суть этих двух ячеек.
И так. Вот мы вводим код в форму поиска и нажимаем искать, что происходит:
1. Введенный код (далее $code) в форму очищается от всех лишних символов кроме букв и цыфр
2. Затем этот $code начинает поиск по таблице prices по ячейкам search_key и выводит на сайт в таблицу все что нашел (причем выводит данные ИМЕННО из ячейки key (не забывайте что в этой ячейке есть до 7-ми кодов (может быть и один код, три, шесть, сколько угодно до семи через специальный символ).
3. Затем $code идет в кросс базу и ищет по ячейке search_key совпадения.
4. Если находит, то берет код ИМЕННО из ячейки key и начинает такой же поиск как в пункте 2. (этот код тоже имеет ТОЛЬКО цыфры и буквы).
5. И так, пока не пройдет всю кросс базу (в кросс базе может быть найдено НЕСКОЛЬКО совпадений).
все.
Можно другой подход (не знаю, Вам виднее, что я только не пробовал, просто подаю идею, и я уверен что кто то из вас уже такое вообще делал).
Введеный $code сначало идет в таблицу cross и собирает все совпадения в например массив, и потом все что найдет ищет по таблице prices и выводит на сайт.
Возможно у вас есть какой то другой особый подход, очень надеюсь на вашу помощь... я правда пол года с этим мучался так и не справился с тем что бы это работало за долю секунды (как например на выше приведенном сайте).
Зарание очень благодарю
ICQ - 5188444
Добрый день товарищи

Помогите решить проблему... пол года мучался так и не получилось сделать это так.. что бы работало моментально.
Такая задача:
Это я пытался сделать сайт для магазина автозапчастей, там вбиваешь код запчасти и все выводится моментально, пример тут - www.partcar.ru пример кода - 0336255000 (только он не ищет через кросс базу, не нашел нужный код).
Суть - поиск по прайсам загруженные в базу данных, строк прайсов более 16-ти миллионов, строк в кросс базе около 3-х миллионов.
Есть 2 таблицы prices и cross
prices имеет следующие ячейки:
id, key, search_key
key - список кодов через любой специальный символ (если можно то - "|" ) (может быть до 7ми штук) оригенального вида. Тоесть например 033-6255-000 этот со всякими тире и т.п. что есть по мимо цыфр - код оригенального вида, а код состоящий только из цифр это...
search_key - список кодов через тот же специальный символ, это поисковой код... когда в базу заносится прайс, все что вносится в key - очищается от всего кроме букв и цыфр и заносится в эту ячейку.
cross имеет следующие ячейки:
id, search_key, key
search_key - тут может быть только ОДИН код.
key - тут тоже может быть только ОДИН код. Щас объясню в чем суть этих двух ячеек.
И так. Вот мы вводим код в форму поиска и нажимаем искать, что происходит:
1. Введенный код (далее $code) в форму очищается от всех лишних символов кроме букв и цыфр
2. Затем этот $code начинает поиск по таблице prices по ячейкам search_key и выводит на сайт в таблицу все что нашел (причем выводит данные ИМЕННО из ячейки key (не забывайте что в этой ячейке есть до 7-ми кодов (может быть и один код, три, шесть, сколько угодно до семи через специальный символ).
3. Затем $code идет в кросс базу и ищет по ячейке search_key совпадения.
4. Если находит, то берет код ИМЕННО из ячейки key и начинает такой же поиск как в пункте 2. (этот код тоже имеет ТОЛЬКО цыфры и буквы).
5. И так, пока не пройдет всю кросс базу (в кросс базе может быть найдено НЕСКОЛЬКО совпадений).
все.
Можно другой подход (не знаю, Вам виднее, что я только не пробовал, просто подаю идею, и я уверен что кто то из вас уже такое вообще делал).
Введеный $code сначало идет в таблицу cross и собирает все совпадения в например массив, и потом все что найдет ищет по таблице prices и выводит на сайт.
Возможно у вас есть какой то другой особый подход, очень надеюсь на вашу помощь... я правда пол года с этим мучался так и не справился с тем что бы это работало за долю секунды (как например на выше приведенном сайте).
Зарание очень благодарю

ICQ - 5188444