Space
Новичок
Нормальный поиск - нужен хэлп по селекту
1. есть свыше 60 тыс. текстовых записей в таблице:
table:
b_data
fields:
id,title,text
ну и еще всякая муть(для примера она нам не нужна)
2. так же есть хэш таблица, содержащая правильные формы слов. слова взяты из словаря, а так же пополненны из различных текстов.
вид:
CREATE TABLE `b_dict_word` (
`id` mediumint(10) NOT NULL default '0',
`name` varchar(40) NOT NULL default '',
`hash` varchar(32) NOT NULL default '',
`len` smallint(2) NOT NULL default '0',
`new` smallint(1) NOT NULL default '0',
UNIQUE KEY `id` (`id`),
KEY `hash` (`hash`)
) TYPE=MyISAM;
слов свыше 100 000
3. так же есть таблица которая поясняет какое слово из таблицы `b_dict_word` встречается в b_data
т.е. суть такая:
слово word_id=10 - электронный
встречается в записях data_id=1,data_id=2...
4. ее вид таков:
CREATE TABLE `b_dict_link` (
`word_id` mediumint(10) NOT NULL default '0',
`data_id` mediumint(20) NOT NULL default '0',
`place` smallint(3) NOT NULL default '0',
KEY `word_id` (`word_id`,`data_id`)
) TYPE=MyISAM;
теперь представим, пользователь ищет
"кофеварка зеленая"
мы переводим эти два слова в нормальный вид:
"кофеварка зеленый" и ищем совпадения в хэш таблице
у меня получается выбрать записи когда введено одно слово, тогда я делаю:
$HASH = md5("кофеварка");
$HASH2 = md5("зеленая");
$QUERY="
select
w.id,w.name,w.hash,w.len
from b_dict_word as w
LEFT JOIN b_dict_link as l ON (l.word_id=w.id)
LEFT JOIN b_data as d ON (d.id=l.data_id)
WHERE w.hash='".$HASH."'
";
как мне дописать этот запрос что бы запись из таблицы b_data содержала 2 искомых слова сразу?
1. есть свыше 60 тыс. текстовых записей в таблице:
table:
b_data
fields:
id,title,text
ну и еще всякая муть(для примера она нам не нужна)
2. так же есть хэш таблица, содержащая правильные формы слов. слова взяты из словаря, а так же пополненны из различных текстов.
вид:
CREATE TABLE `b_dict_word` (
`id` mediumint(10) NOT NULL default '0',
`name` varchar(40) NOT NULL default '',
`hash` varchar(32) NOT NULL default '',
`len` smallint(2) NOT NULL default '0',
`new` smallint(1) NOT NULL default '0',
UNIQUE KEY `id` (`id`),
KEY `hash` (`hash`)
) TYPE=MyISAM;
слов свыше 100 000
3. так же есть таблица которая поясняет какое слово из таблицы `b_dict_word` встречается в b_data
т.е. суть такая:
слово word_id=10 - электронный
встречается в записях data_id=1,data_id=2...
4. ее вид таков:
CREATE TABLE `b_dict_link` (
`word_id` mediumint(10) NOT NULL default '0',
`data_id` mediumint(20) NOT NULL default '0',
`place` smallint(3) NOT NULL default '0',
KEY `word_id` (`word_id`,`data_id`)
) TYPE=MyISAM;
теперь представим, пользователь ищет
"кофеварка зеленая"
мы переводим эти два слова в нормальный вид:
"кофеварка зеленый" и ищем совпадения в хэш таблице
у меня получается выбрать записи когда введено одно слово, тогда я делаю:
$HASH = md5("кофеварка");
$HASH2 = md5("зеленая");
$QUERY="
select
w.id,w.name,w.hash,w.len
from b_dict_word as w
LEFT JOIN b_dict_link as l ON (l.word_id=w.id)
LEFT JOIN b_data as d ON (d.id=l.data_id)
WHERE w.hash='".$HASH."'
";
как мне дописать этот запрос что бы запись из таблицы b_data содержала 2 искомых слова сразу?